I am trying to do an update query on MongoDB.
Here is the request :
db.test.update({
'id': 1,
'tab': [{'code': 'A'}]
},{
$set:{
'tab.$[tab].newField': 'value'
}
},{
arrayFilters: [{
'tab.code': 'A'
}],
upsert: true
}
)
I use $[<identifier>]
instead of $
syntax because I need to upsert the document if no match is found.
According to MongoDB documentation, this is not possible with positional operator $
.
An example of a document :
{
'id': 1,
'tab': [{
'code': 'A',
'foo': 'bar'
}],
}
In this specific case, the document will be upserted because the filter on tab
needs the whole array to match.
But I want to update it.
Upsert would be used only if the id
and the code
into the array don't match.
Is there a way to select the array by a unique field, here code
?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…