有一个这样的文件:
{
"_id" : ObjectId("591ec6ca277b295fa98a772b"),
"userId" : 10,
"appPrefs" : [
{
"type" : "navi",
"elements" : [
{
"name" : "apple",
"value" : "",
"updateTime" : NumberLong(1222222222)
},
{
"name" : "banana",
"value" : "",
"updateTime" : NumberLong(1222222222)
}
]
}
]
}
您可能会发现elements
是一个集合并嵌入到另一个集合appPrefs
中。
如果updateTime
小于特定更新时间(例如1300000000)和userId = 10 &&type = navi && elements.name = apple
,我想更新db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elements": {$elemMatch: {name : "apple"}}}}})
。首先,我尝试匹配元素并编写查询,但没有返回任何项目。
AND
但没有退回任何物品。任何人都可以帮助检查它为什么会发生?
提前致谢。
更新查询@Samip Suwal说。
答案 0 :(得分:2)
在您提供的查询中,我看到字段"元素"的拼写错误。你有" elemments"而不是"元素" 如此改变
db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elemments": {$elemMatch: {name : "apple"}}}}})
到
db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elements": {$elemMatch: {name : "apple"}}}}})
应该给你一个匹配。
对于更新部分。 我不认为现在有两个更新mongodb中多个嵌套数组中的元素。这是一个jira请求jira-831,请求解决此问题。
此外,如果有多个元素与查询匹配,我相信mongodb也不支持对数组中所有匹配项进行更新。这是一个jira请求,jira-1243,解决了这个问题。
答案 1 :(得分:1)
你不能这样做,因为这是Mongodb的当前限制。在这里,您尝试更新嵌套数组中的元素。当我们需要更新数组中的元素时,$用于保持位置。但它只支持一个级别。在这里有两个级别。您可以参考this了解更多详情。 但是你有两种选择。