从MongoDB嵌套的JSON数组中检索值

3

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

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


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

}

我希望提取“**category**”这个属性,当且仅当“location”为“Houston”。对于简单的JSON对象,我只需将其作为查询传递即可:
BasicDBObject place = new BasicDBObject();
place.put("location", "Houston");

但是如果涉及到嵌套的JSON数据,我不知道如何将其作为查询传递并获取相应的类别。例如,如果我将我的位置设置为“Houston”,那么它应该返回相应的类别“cat1”……希望我的问题现在清楚了……

1个回答

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

现在你可以使用点操作符来查找所需内容:

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,但是根据这个问题,你可以像这样做。如果不起作用,只需查看如何在mongo的java驱动程序中使用点操作符:

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

P.S. 你说过你想要检索类别。因此,你需要使用一个投影 db.coll1.find({<我提供的查询>}, {category: 1, _id: 0})


没错,它很好地运行了@Salvador...感谢你的帮助。 - sooraj g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接