Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-42084

Easy syntax for $setIfModified behavior

    XMLWordPrintableJSON

Details

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Major - P3 Major - P3
    • None
    • 4.2.0
    • Write Ops
    • None
    • Query Optimization

    Description

      see SERVER-13578. This behavior is "possible" using update pipeline syntax released in 4.2, but it becomes extremely verbose for this common use case.

      Example 

      db.runCommand(
       {
       update: "test",
       updates: [
       {
       q: { a: 1 },
       u: [
       { $set: { a: 1, b: 2,
      created_at: {$cond: [
       {$eq:[ {$type:"$_id"}, "missing" ] },
       ISODate(),
       "$created_at"
       ] },
      updated_at: {$cond: [
       {$or: [
       $ne:["$a", 1],
       $ne:["$b", 2],
       ]},
       ISODate(),
       "$updated_at"
       ] }
      } },
       ],
       upsert: true
       }
       ],
       writeConcern: { w: "majority", wtimeout: 5000 }
       }
      )
      

       

      You can see that as the complexity of the document grows, the more verbose the command becomes to get this behavior. It would be nice to get this behavior with an easy to use operator (e.g. $setIfModified)

      Attachments

        Activity

          People

            backlog-query-optimization Backlog - Query Optimization
            nefiga Ben Rotz
            Votes:
            12 Vote for this issue
            Watchers:
            21 Start watching this issue

            Dates

              Created:
              Updated: