Mongodb 在子文档数组中插入新字段

Mongodb 在子文档数组中插入新字段,mongodb,Mongodb,我有以下模式: { "name" : "MyName", "actions" : [{ "kind" : "kind1", "result" : "result1" }, { "kind":"kind1", "result":"result1" } ] } 我想在actions中的不同子文档中插入一个名为“expected”的新字段。我尝试了以下命令,但遇到问题: db.tasks.updat

我有以下模式:

{
   "name"    : "MyName",
   "actions" : [{
       "kind"   : "kind1",
       "result" : "result1"
   },
   {
       "kind":"kind1",
       "result":"result1"
   }
   ]
}
我想在actions中的不同子文档中插入一个名为“expected”的新字段。我尝试了以下命令,但遇到问题:

db.tasks.update({},{$push:{ "actions.expected" : "MyExpected" }},false,true)
can't append to array using string field name expected

数组中有json对象,但在查询中尝试添加字符串。这就是为什么你有一个例外。您可以按如下方式更新查询

db.tasks.update({},{$push:{ "actions" : {"expected" : "MyExpected"} }},false,true)

问题是,您试图将
$push
推入一个数组,但您给出的目标不是数组

actions.expected
actions
字段中的
expected
字段,您正在将
“MyExpected”
推送到该数组中,但这样的数组不存在

让我们假设你有以下数据,也许这是最好的解释。您的查询将在如下数据结构上工作:

actions : { expected : [] } // actions is an object here
// ... {$push:{ "actions.expected" : "MyExpected" }}
actions : { expected : ["MyExpected"] }
相反,您可能希望将对象推入actions数组:

actions : []
$push : { "actions" : { "expected" : "MyExpected" } }
actions : [ { "expected" : "MyExpected" } ]

您可以使用$addToSet功能:

试一试

db.tasks.update({}, {$addToSet: {'actions.expected': 'MyExpected'}})