Не удается добавить в массив, используя строковое имя поля [$] при обновлении полей массива.
Строки Я пытаюсь выполнить обновление mongodb для каждого поля в массиве записей.
Пример схемы приведен ниже:
{
"_id" : ObjectId("508710f16dc636ec07000022"),
"summary" : "",
"uid" : "ABCDEF",
"username" : "bigcheese",
"name" : "Name of this document",
"status_id" : 0,
"rows" : [
{
"score" : 12,
"status_id" : 0,
"uid" : 1
},
{
"score" : 51,
"status_id" : 0,
"uid" : 2
}
]
}
До сих пор я мог выполнять отдельные обновления, как это:
db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)
Тем не менее, я борюсь за то, как выполнить обновление, которое обновит все записи массива до status_id
из 1 (например).
Ниже я представляю, как это должно работать:
db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)
Однако я получаю ошибку:
невозможно добавить в массив, используя строковое имя поля [$]
Я пытался довольно долго без удачи. Есть указатели?
1 ответ
Решение
Вы не можете выполнить своего рода "подстановочное" обновление элементов массива, которые вы ищете. Я думаю, что лучшее, что вы можете сделать, это одновременно установить каждый элемент status_id
значение как это:
db.mycollection.update(
{"uid":"ABCDEF"},
{$set:{
"rows.0.status_id":1,
"rows.1.status_id":1
}}, false, true);