我有以下架构:
{
"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
答案 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.expected
是expected
字段中的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" } ]