Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MongoDB更新数组元素_Arrays_Mongodb_Push_Insert Update - Fatal编程技术网

Arrays MongoDB更新数组元素

Arrays MongoDB更新数组元素,arrays,mongodb,push,insert-update,Arrays,Mongodb,Push,Insert Update,我有一个像这样的文档结构 { “_id”:ObjectId(“52263922f5ebf05115bf550e”), “字段”:[ { “字段”:“批号”, “规则”:[] }, { “字段”:“RMA编号”, “规则”:[] } ] } 我已尝试使用以下代码将更新推入包含对象的规则数组 db.test.update({ “Fields.Field”:{$in:[“批号”]} }, { $addToSet:{ “Fields.Field.$.Rules”:{ “项目名称”:“我的项目二”, “

我有一个像这样的文档结构

{
“_id”:ObjectId(“52263922f5ebf05115bf550e”),
“字段”:[
{
“字段”:“批号”,
“规则”:[]
},
{
“字段”:“RMA编号”,
“规则”:[]
}
]
}
我已尝试使用以下代码将更新推入包含对象的规则数组

db.test.update({
“Fields.Field”:{$in:[“批号”]}
}, {
$addToSet:{
“Fields.Field.$.Rules”:{
“项目名称”:“我的项目二”,
“价格”:1
}
}
},假,真);
但我得到了以下错误:

无法使用字符串字段名[field]追加到数组


如何进行更新?

您使用该通配符太深了
$
。您可以在
字段
数组中匹配一个项目,因此您可以通过:
字段访问该项目。$
。此表达式返回
字段
数组中的第一个匹配项,因此可以通过
字段。$.Field
字段。$.Result
到达其字段

现在,让我们更新
更新

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

请注意,我缩短了
查询
,因为它与您的表达式相等。

我认为您的$addToSet运算符中有一个多余的
字段
。请尝试
$addToSet:{“字段.$.Rules”:…