MongoDB Update Array元素

时间:2013-09-03 20:19:34

标签: arrays mongodb push insert-update

我有一个像

这样的文档结构
{
    "_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);

但是我收到以下错误:

  

无法使用字符串字段名称[Field]

附加到数组

如何进行更新?

1 个答案:

答案 0 :(得分:4)

你对那个通配符$走得太深了。您匹配Fields数组中的某个项目,因此您可以使用Fields.$获取该项目的访问权限。此表达式返回Fields数组中的第一个匹配项,因此您可以按Fields.$.FieldFields.$.Result到达其字段。

现在,让我们更新update

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

请注意,我缩短了query,因为它等于你的表达。