-
Type:
New Feature
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Querying
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
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}]}
- related to
-
SERVER-6566 Support conditional updates: $updates
-
- Closed
-