Не удается добавить в массив, используя строковое имя поля [$] при обновлении полей массива.

Строки Я пытаюсь выполнить обновление 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);
Другие вопросы по тегам