Details
Description
FOR a given DOCUMENT, where i have a unique sub document, which i want to update ..
{
|
id:1,
|
a:[
|
{
|
id:2,
|
b:[
|
{
|
id:3,
|
c:[
|
{
|
id:4,
|
d:["x","y"]
|
},
|
{
|
id:5,
|
d:["p","q"]
|
}
|
]
|
},
|
{
|
id:13,
|
c:[
|
{
|
id:14,
|
d:["w","q"]
|
},
|
{
|
id:15,
|
d:["i","j"]
|
}
|
]
|
}
|
]
|
}
|
]
|
}
|
FOR this document you cannot update d to d:["x","y","z"] ;
PROPOSED change to update using PLACEMARKERS $as : $1 / $2 to the matched location rather $elemMatch
NOTE : this is the proposed change .. beeter ways could be provided.
db.coll.update({
|
id:1,
|
a:[
|
{
|
id:2,
|
$as:1
|
b:[
|
{
|
id:3,
|
c:[
|
{
|
id:4,
|
$as:2
|
}
|
]
|
}
|
]
|
}
|
]
|
},
|
{
|
$addToSet:{$2:{"d":["z"]}}
|
}
|
);
|
PLEASE SEE $elemMatch or any other operator doesn't work here ..
even if i have the unique path to my subdocument. Which matches a single element .. i cannot update.. this is the BIGGEST feature gap.