插入子文档数组中的新字段

时间:2013-12-02 13:52:49

标签: mongodb

我有以下架构:

{
   "name"    : "MyName",
   "actions" : [{
       "kind"   : "kind1",
       "result" : "result1"
   },
   {
       "kind":"kind1",
       "result":"result1"
   }
   ]
}

我想插入一个名为' expected'的新字段。在动作中的不同子文档中。我尝试了以下命令,但我遇到了问题:

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

3 个答案:

答案 0 :(得分:1)

您可以使用$ addToSet功能:

http://docs.mongodb.org/manual/reference/operator/update/addToSet/

尝试

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

嗯,问题是你正在尝试$push进入一个数组,但你提供的目的地不是一个数组。

actions.expectedexpected字段中的actions字段,您正在将"MyExpected"推送到该数组中 - 但这样的数组不存在。

假设您拥有以下数据,或许最能解释这些数据。您的查询将适用于这样的数据结构:

actions : { expected : [] } // actions is an object here
// ... {$push:{ "actions.expected" : "MyExpected" }}
actions : { expected : ["MyExpected"] }

相反,您可能希望将对象推送到actions数组中:

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