java选择数组中的数组元素
这是数据库中的对象
{
"_id" : { "$oid" : "53a9ce071e24a7a0a4bef03a"} ,
"name" : "name4" ,
"sections" : [
{
"id" : "sectionId1" ,
"subs" : [
{ "name" : "name1" , "enable" : true} ,
{ "name" : "name2" , "enable" : false} ,
{ "name" : "name3" , "enable" : true}
]
},
{
"id" : "sectionId2",
"subs" : [
{ "name" : "name1" , "enable" : true} ,
{ "name" : "name5" , "enable" : false} ,
{ "name" : "name6" , "enable" : true}
]
},
{ "id" : "sectionId3"}
]
}
这是我的代码:
BasicDBObject query = new BasicDBObject();
query.append("name", "name4");
query.append("sections", new BasicDBObject(
"$elemMatch", new BasicDBObject("id", "sectionId2")
));
query.append("sections.subs", new BasicDBObject(
"$elemMatch", new BasicDBObject("name", "name1")
));
我正在尝试访问'sectionId2'的'subs'中的'name1'。但我的查询返回'sectionId1'中的子项。我只有“名字1”有这个问题。我可以访问“name2”、“name3”等,没有任何错误,因为它们是唯一的
提前谢谢
# 1 楼答案
可能是因为您使用的是$elemMatch,$elemMatch投影只返回数组中的第一个匹配元素see it here