Элемент массива обновлений MongoDB

У меня есть структура документа, например

{
    "_id" : ObjectId("52263922f5ebf05115bf550e"),
    "Fields" : [
        {
            "Field" : "Lot No",
            "Rules" : [ ]
        },
        {
            "Field" : "RMA No",
            "Rules" : [ ]
        }
    ]
}

Я попытался обновить, используя следующий код для ввода в массив правил, который будет содержать объекты.

db.test.update({
    "Fields.Field":{$in:["Lot No"]}
}, {
    $addToSet: {
        "Fields.Field.$.Rules": {
            "item_name": "my_item_two",
            "price": 1
        }
    }
}, false, true);

Но я получаю следующую ошибку:

невозможно добавить в массив, используя строковое имя поля [Поле]

Как мне сделать обновление?


person TommyK    schedule 03.09.2013    source источник
comment
Я думаю, что у вас есть лишний Field в вашем $addToSet-Operator. Попробуйте $addToSet: { "Fields.$.Rules": ...   -  person Philipp    schedule 04.09.2013


Ответы (1)


Вы зашли слишком далеко с подстановочным знаком $. Вы сопоставляете элемент в массиве Fields, поэтому вы получаете доступ к нему с помощью: Fields.$. Это выражение возвращает первое совпадение в вашем массиве Fields, поэтому вы достигаете его полей через Fields.$.Field или Fields.$.Result.

Теперь давайте обновим update:

db.test.update({
    "Fields.Field": "Lot No"
}, {
    $addToSet: {
        "Fields.$.Rules": {
            'item_name': "my_item_two",
            'price':1
        }
    }
}, false, true);

Обратите внимание, что я сократил query, так как он равен вашему выражению.

person Dyin    schedule 03.09.2013