我的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})