Java 将对象推送到嵌套集合的mongo查询
有这样一份文件:Java 将对象推送到嵌套集合的mongo查询,java,mongodb,mongodb-query,Java,Mongodb,Mongodb Query,有这样一份文件: { "_id" : ObjectId("591ec6ca277b295fa98a772b"), "userId" : 10, "appPrefs" : [ { "type" : "navi", "elements" : [ { "name" : "apple",
{
"_id" : ObjectId("591ec6ca277b295fa98a772b"),
"userId" : 10,
"appPrefs" : [
{
"type" : "navi",
"elements" : [
{
"name" : "apple",
"value" : "",
"updateTime" : NumberLong(1222222222)
},
{
"name" : "banana",
"value" : "",
"updateTime" : NumberLong(1222222222)
}
]
}
]
}
您可能会发现elements
是一个集合,并嵌入到另一个集合appPrefs
中
我想更新updateTime
,如果它小于特定的更新时间(例如130000000),并且userId=10&&type=navi&&elements.name=apple
。首先,我尝试匹配元素并编写查询,但没有返回任何项
db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elements": {$elemMatch: {name : "apple"}}}}})
但没有归还任何物品。有人能帮我查一下为什么会这样吗
提前谢谢
将查询更新为@Samip Suwal
在您提供的查询中,我看到字段“elements”的输入错误。你有“元素”而不是“元素” 如此变化
db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elemments": {$elemMatch: {name : "apple"}}}}})
到
我应该还给你一根火柴
对于更新部分。
我认为目前不可能在mongodb中的多个嵌套数组中更新一个元素。这是一个jira请求,这个请求解决了这个问题
另外,在有多个元素与查询匹配的情况下,我认为mongodb也不支持数组中所有匹配项的更新。这是一个jira请求,可以解决这个问题。您不能这样做,因为这是Mongodb当前的一个限制。在这里,您试图更新嵌套数组中的元素。当我们需要更新数组中的元素时,用于保持位置。但它只支持一个级别。在这里有两个层次。你可以参考更多细节。 但是你有两个选择
非常感谢你告诉我打字错误。谢谢你的建议,我选第一个。
db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elements": {$elemMatch: {name : "apple"}}}}})