У меня есть следующий документ:MongoDB объекты обновления вложенных в массивах вложенных в других массивах без использования индекса массива (вложенная обновления)
{
"_id" : ObjectId("5720bdac527623f2889"),
"planes" : [
{
"name" : "plane1",
"wings" : [
{
"name" : "rightDown"
},
{
"name" : "rightUp"
}
]
},
{
"name" : "plane2",
"wings" : [
{
"name" : "leftUp",
},
{
"name" : "leftDown",
}
]
}
]
}
Я хочу, чтобы обновить объект в массиве вложен в другом массиве, без использования индекса массива. В моем примере «plane2» с крылом свойства «leftDown». Является ли это возможным ?
db.planes.update({
planes: {
$elemMatch: {
wings: {
$elemMatch: {
name: 'leftUp'
}
}
}
}
},
// It would be wonderful if I the $set would look like this,
// but the error is:
// "Too many positional (i.e. '$') elements found in path 'planes.$.wings.$'"
//
// It seems that $ holds only the value of the first nested
// object in the array
{
$set: {
'planes.$.wings.$': {
name: 'leftMagic'
}
}
})
MongoDb 3.2 документация говорит: Позиционный $ оператор не может быть использован для запросов, которые пересекают более чем один массив, такие как запросы, которые пересекают массивы, вложенные в других массивах, так как замена для $ заполнителя является единственной значение
Но я все еще жду этого чуда. Есть ли еще какие-нибудь другие чистые/красивые способы сделать обновление в одной съемке?