| Steps To Reproduce: |
Step 1. Make a collection called 'locations'
Step 2. Insert this document in the locations collection:
{
|
"_id" : "XqEQYpitGFG3nnf3C",
|
"wallpapers" : [
|
{
|
"_metadata" : {
|
"master" : "vwb22W4MhkqtvAp89",
|
"isMaster" : false
|
},
|
"role" : "master",
|
"_id" : ""
|
},
|
{
|
"_metadata" : {
|
"master" : "vwb22W4MhkqtvAp89",
|
"isMaster" : false
|
},
|
"role" : "clone",
|
"_id" : ""
|
},
|
{
|
"_metadata" : {
|
"master" : "vwb22W4MhkqtvAp89",
|
"isMaster" : false
|
},
|
"role" : "pod",
|
"_id" : ""
|
}
|
],
|
"ancestors" : [
|
"vwb22W4MhkqtvAp89",
|
"tqzqfum9uMs47xcHW",
|
"b4d83aqTkq6TGvXts",
|
"XqEQYpitGFG3nnf3C"
|
]
|
Step 3. Run this query:
b.getCollection('locations').update(
|
{
|
"ancestors": "b4d83aqTkq6TGvXts",
|
"wallpapers": {
|
"$elemMatch": {
|
"role": "clone",
|
"_metadata.master": "vwb22W4MhkqtvAp89"
|
}
|
}
|
},
|
{
|
"$set": {
|
"wallpapers.$": {
|
"_id": "D33WNZh7Bg4itPdhk",
|
"_metadata": {
|
"master": "b4d83aqTkq6TGvXts",
|
"isMaster": false
|
},
|
"role": "clone"
|
}
|
}
|
}
|
)
|
Step 4
Document is now:
{
|
"_id" : "XqEQYpitGFG3nnf3C",
|
"wallpapers" : [
|
{
|
"_metadata" : {
|
"master" : "vwb22W4MhkqtvAp89",
|
"isMaster" : false
|
},
|
"role" : "master",
|
"_id" : ""
|
},
|
{
|
"_metadata" : {
|
"master" : "vwb22W4MhkqtvAp89",
|
"isMaster" : false
|
},
|
"role" : "clone",
|
"_id" : ""
|
},
|
{
|
"_id" : "D33WNZh7Bg4itPdhk",
|
"_metadata" : {
|
"master" : "b4d83aqTkq6TGvXts",
|
"isMaster" : false
|
},
|
"role" : "clone"
|
}
|
],
|
"ancestors" : [
|
"vwb22W4MhkqtvAp89",
|
"tqzqfum9uMs47xcHW",
|
"b4d83aqTkq6TGvXts",
|
"XqEQYpitGFG3nnf3C"
|
]
|
}
|
So the `$` operator uses the index of the `ancestor` part of the update operation query, instead of the `wallpapers` one.
|