Easy syntax for $setIfModified behavior

XMLWordPrintableJSON

    • Type: Improvement
    • Resolution: Unresolved
    • Priority: Major - P3
    • None
    • Affects Version/s: 4.2.0
    • Component/s: Write Ops
    • None
    • Query Optimization
    • None
    • 3
    • None
    • None
    • None
    • None
    • None
    • None

      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)

            Assignee:
            [DO NOT USE] Backlog - Query Optimization
            Reporter:
            Ben Rotz
            Votes:
            12 Vote for this issue
            Watchers:
            21 Start watching this issue

              Created:
              Updated: