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

Easy syntax for $setIfModified behavior

    XMLWordPrintable

Details

    • Improvement
    • Status: Backlog
    • Major - P3
    • Resolution: Unresolved
    • 4.2.0
    • None
    • Write Ops
    • None

    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

        Issue Links

          Activity

            People

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

              Dates

                Created:
                Updated: