Details
-
New Feature
-
Resolution: Duplicate
-
Major - P3
-
None
-
None
-
None
Description
I want to update an object or push an object to an array in one query? For e.g if the document is
{list: [{a: 1}]}
|
I want to add a new object
{b: 2}
|
to list if this object doesn't exists in the list otherwise I want to update it.
db.temp.update({
|
list: {
|
$exists: true
|
}
|
},
|
{
|
$set: {
|
"list.$[elem].a1": 10,
|
},
|
$pushIfNoMatch: {
|
list: {b: 2}
|
}
|
},
|
{
|
arrayFilters: [{
|
"elem.a": {
|
$ne: 1
|
}
|
}],
|
|
multi: true,
|
upsert: true
|
})
|
Since condition in arrayFilter will return false, $pushIfNoMatch operator will work and the new state of document will be
{list: [{a: 1}, {b: 2}]}
|
if we change the condition to $eq: 1, the $set operator will work and new state will be
{list: [{a: 1, a1: 10}]}
|
Attachments
Issue Links
- related to
-
SERVER-6566 Support conditional updates: $updates
-
- Closed
-