У меня несколько документов в коллекции, каждый документ имеет такую структуру данных:MongoDB вставки с несколькими условиями
{
_id: "some object id",
data1: [
{
data2_id : 13233,
data2: [
{
sub_data1: "text1",
sub_data2: "text2",
sub_data3: "text3",
},
{
sub_data1: "text4",
sub_data2: "text5",
sub_data3: "text6",
}
]
},
{
data2_id : 53233,
data2: [
{
sub_data1: "text4",
sub_data2: "text5",
sub_data3: "text6",
}
...
]
},
{
data2_id : 56233,
data2: [
{
sub_data1: "text7",
sub_data2: "text8",
sub_data3: "text9",
}
...
]
},
{
data2_id : 53236,
data2: [
{
sub_data1: "text10",
sub_data2: "text22",
sub_data3: "text33",
}
...
]
}
]
}
я хотел бы обновить до набора идентификаторов, которые maches некоторого условия, обновлять только субобъект внутри документа.
Я пытается сделать это:
db.collection.update({
"$and": [
{
"_id": {
"$in": [
{
"$id": "54369aca9bc25af3ca8b4568"
},
{
"$id": "54369aca9bc25af3ca8b4562"
}
]
}
},
{
"data1.data2": {
"$elemMatch": {
"sub_data1": "text4",
"sub_data2": "text5"
}
}
}
]
},
{
"data1.data2.$.sub_data3" : "text updated"
}
)
Но я получаю следующее сообщение об ошибке:
Обновление данных в MongoDB не удалось: Дев ** ком:.. 27017: не может использовать часть (data2 of data1.data2.0.sub_data3) для перемещения элемента ...
Любые идеи?
Оператор позиции обновления '$' не может поддерживать вложенный массив. Это означает, что 'data1. $. Data2' приемлемо, но не' data1.data2. $ '. Я обнаружил, что существует более одного 'data2' как элемент условия запроса' data1', поэтому этот оператор позиции '$' не подходит для использования здесь, потому что он только находит первое место и игнорирует другие. Я думаю, вам нужно извлечь весь запрос 'data1' из запроса перед обновлением. – Wizard