I have a document which looks like this
{
_id:1,
list_id:23,
name:\'list01\'
cards:[
{
id:3,
name:\'card01\'
categories:[{
id:10,
categ
In short, it is not possible.
Nested Arrays
The positional $ operator cannot be used for queries which traverse more than one array, such as queries that traverse arrays nested within other arrays, because the replacement for the $ placeholder is a single value
https://docs.mongodb.com/manual/reference/operator/update/positional/
However, you may want to try $[]
Nested Arrays The filtered positional operator $[] can be used for queries which traverse more than one array and nested arrays.
For an example, see Update Nested Arrays in Conjunction with $[].
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#position-nested-arrays-filtered
You can use $[identifier]
db.collection.update({
"list_id": 23,
"cards.categories.category": "section01"
},
{
$push: {
"cards.$.categories.$[elem].tags": {
name: "tag02",
id: uuidv4(),
is_selected: true
}
}
},
{
arrayFilters: [
{
"elem.category": "section01"
}
],
multi: true
})
try it here
You can not use multiple $ positional, for your case you can use single positional and arrayFilters,
The filtered positional operator $[<identifier>]
identifies the array elements that match the arrayFilters conditions for an update operation,
db.collection(TABLE).updateOne({
list_id: 23,
"cards.categories.category": "section01"
},
{
$push: {
"cards.$.categories.$[elem].tags": {
name: "tag02",
id: uuidv4(),
is_selected: true
}
}
},
{
arrayFilters: [
{ "elem.category": "section01" }
]
})
Playground