-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: 4.2.0
-
Component/s: Write Ops
-
None
-
Query Optimization
-
(copied to CRM)
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)
- is duplicated by
-
SERVER-51208 New field `$setOnUpdate` will solve some problems
- Closed