Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将对象推送到嵌套集合的mongo查询_Java_Mongodb_Mongodb Query - Fatal编程技术网

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当前的一个限制。在这里,您试图更新嵌套数组中的元素。当我们需要更新数组中的元素时,用于保持位置。但它只支持一个级别。在这里有两个层次。你可以参考更多细节。 但是你有两个选择

  • 您可以将此文档拆分为两个集合并使用
  • 您可以搜索文档(这是可以做到的),在java中,您可以在java中操作文档,并进行保存

  • 非常感谢你告诉我打字错误。谢谢你的建议,我选第一个。
    db.cname.find({"userId" : 10, "appPrefs":{$elemMatch: {type : "navi", "elements": {$elemMatch: {name : "apple"}}}}})