首先让我说对不起,如果这已经得到了解答,但我无法在这个网站上提出其他问题以满足我的需求,更重要的是,工作。
我有以下示例文档,其子文档为'地址':
{
"_id" : ObjectId("....")
,"addresses" :
[{
"start" : ISODate("1973-07-10T00:11:51.111Z")
,"value" : "123 long road"
}]
}
我需要做的是使用end
属性关闭现有地址记录,并使用新的start
和value
属性为新地址添加新行。最后,我需要再次执行此操作,因此代码需要更新不存在end
的子文档记录。
以下代码不起作用,但就我所能得到的而言:
db.sites.update(
{"_id" : ObjectId("....")
, "addresses.end" : {"$exists" : false}}
,{"$set": {"addresses.$.end" : "fdsa"}});
这给出了错误:
Cannot apply the positional operator without a corresponding query field containing an array.
有人能指出我正确的方向吗?
答案 0 :(得分:2)
您的查询"addresses.end" : {"$exists" : false}
中的Juste替换为:
addresses: {$elemMatch: {end: {$exists: false}}}
答案 1 :(得分:0)
我认为查询应该更具体
**更新**
db.sites.update ( {"_id" : ObjectId("...."), addresses: { "$elemMatch" : { end:{$exists : false}} } }, {"$set": {"addresses.$.end" : "fdsa"}});
db.sites.find()
结果:
{
"_id" : ObjectId("53df93da560b7815e1237934"),
"addresses" : [
{
"start" : ISODate("1973-07-10T00:11:51.111Z"),
"value" : "123 long road",
"end" : "fdsa"
}
]
}
但您只能更新一个
看看http://docs.mongodb.org/manual/reference/operator/projection/positional/#proj.S
中的更多元素答案 2 :(得分:0)
您的地址字段定义不明确。你需要使它成为子文档或子文档数组。即{ " _id" :ObjectId(" ....") "地址" : [ 的 {强> "开始" :ISODate(" 1973-07-10T00:11:51.111Z") "值" :" 123漫长的道路" 的} 强> ] }
您的查询应该有效!