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

soo*_*j g 3 java json mongodb

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

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


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

}
Run Code Online (Sandbox Code Playgroud)

我想提取的"**category**"地方location"Houston".在简单的JSON对象的情况下,我必须将其作为查询传递,如:

BasicDBObject place = new BasicDBObject();
place.put("location", "Houston");
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*ali 7

好的,你有你的文件:

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

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

现在,您可以使用点运算符找到所需内容:

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,但基于这个问题你可以做类似的事情.如果它不起作用,只需看看如何在java驱动程序中使用dot运算符为mongo:

DBCursor cursor = coll1.find(new BasicDBObject("myobj.objList.location", "Texas"));
Run Code Online (Sandbox Code Playgroud)

你告诉PS,你想要检索类别.以这种方式,您将需要使用投影db.coll1.find({<the query I provided}, {category: 1, _id: 0})