我的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”...我希望我的问题现在清楚了....
答案 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})