微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 从mongodb中的嵌套json数组中检索值

我的mongo集合具有以下格式的条目

{
    "myobj" : {
        "objList" : [
            { "location" : "Texas" },
            { "location" : "Houston"},
            { "name":"Sam" }
        ]
    }, 
    "category" : "cat1"
}


{
"myobj" : 
{
    "objList" : [
        { "location" : "Tennesy" },
        { "location" : "NY"},
        { "location" : "SF" }
    ]
}, 
"category" : "cat2"

}

我想提取位于“休斯顿”的“**类别**”.在简单的JSON对象的情况下,我必须将其作为查询传递,如:

BasicDBObject place = new BasicDBObject();
place.put("location", "Houston");

但是在嵌套JSON的情况下,我不知道如何将其作为查询传递并获得适当的类别.即如果我将我的位置作为“休斯顿”通过,那么它应该返回它的相应类别“cat1”…我希望我的问题现在清楚了….

解决方法:

好的,你有你的文件

db.coll1.insert({
    "myobj" : {
        "objList" : [
            { "location" : "Texas" },
            { "location" : "Houston"},
            { "name":"Sam" }
        ]
    }, 
    "category" : "cat1"
})

db.coll1.insert({
    "myobj" : {
        "objList" : [
            { "location" : "Tennesy" },
            { "location" : "Houston"},
            { "location" : "SF" }
        ]
    }, 
    "category" : "cat1"
})

现在您可以使用dot operator找到您想要的内容

db.coll1.find({“myobj.objList.location”:“Texas”}).pretty()将返回一个具有德克萨斯州的对象

db.coll1.find({“myobj.objList.location”:“SF”}).pretty()将返回一个具有SF的对象

db.coll1.find({“myobj.objList.location”:“Houston”}).pretty()将返回两个对象

现在我希望你能用Java编写它.我从来没有使用过Java,但based on this question你可以做这样的事情.如果它不起作用,只需看看如何在java驱动程序中使用dot运算符为mongo:

DBCursor cursor = coll1.find(new BasicDBObject("myobj.objList.location", "Texas"));

附:你说,你想要检索类别.以这种方式,您将需要使用投影db.coll1.find({<我提供的查询},{category:1,_id:0})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐