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

时间:2015-04-01 09:04:49

标签: java json mongodb

我的mongo集合包含以下格式的条目

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


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

}

我想提取"**category**" location"Houston"的{​​{1}}。在简单的JSON对象的情况下,我必须将其作为查询传递:

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

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

1 个答案:

答案 0 :(得分:7)

好的,你有你的文件:

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()将返回一个包含Texas

的对象

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"));

P.S。你说,你想要检索类别。通过这种方式,您需要使用投影db.coll1.find({<the query I provided}, {category: 1, _id: 0})