查询文档嵌套多数组mongodb elemMatch

查询文档嵌套多数组mongodb elemMatch,mongodb,multidimensional-array,Mongodb,Multidimensional Array,我有以下文件: //document 1 { info : [ { id : 100, field : { a : 1, b : 2 } }, { id : 200, field : {

我有以下文件:

//document 1
{
    info : [
        {
            id  : 100,
            field : {                   
                a : 1,
                b : 2
            }
        },
        {
            id  : 200,
            field : {                   
                a : 3,
                b : 4
            }
        },
        {
            id  : 300,
            field : {                   
                a : 5,
                b : 6
            }
        }
    ]
},
//document 2
{
    info : [
        {
            id  : 400,
            field : {                   
                a : 7,
                b : 8
            }
        },
        {
            id  : 500,
            field : {                   
                a : 9,
                b : 10
            }
        }
    ]
}
我需要找到带有值字段.a=7和字段.b=8的子文档的id,这意味着id值是400

我试过的是$elemMatch,但没有结果

我的尝试:

计划1:

db.mycollection.findOne({info : {$elemMatch : {  'field.$.a':7,'field.$.b':8   } } });
计划2:

db.mycollection.findOne({info:{$elemMatch:{$elemMatch:{'field.$.a':7,'field.$.b':8,}}}});
计划3:

db.mycollection.findOne({info:{$elemMatch:{$elemMatch:{'field.a.$':7,'field.b.$':8,}}}});
计划4:

db.mycollection.findOne({info:{$elemMatch:{'field.$.a':7,'field.$.b':8,}}});
运算符的工作方式类似于针对其所作用的指定数组元素的“迷你查询”,因此参数进入其中。此外,这里的运算符是“投影”属性,而不是查询文档本身,因此这是一个单独的元素:

db.mycollection.find(
{
“信息”:{
“$elemMatch”:{“field.a”:7,“field.b”:8}
}
},
{“info.$”:1}
)
这两者都匹配包含匹配元素的文档,然后由于投影而仅返回匹配元素:

{
“_id”:ObjectId(“564d52979f28c6e0feabceee”),
“信息”:[
{
“id”:400,
“字段”:{
“a”:7,
“b”:8
}
}
]
}

您必须使用聚合框架来获取子文档的idtry
db.mycollection.findOne({info:{$elemMatch:{field:{'a':7,'b':8}})这实际上是可行的,我只是让你使用投影db.mycollection.findOne({info:{$elemMatch:{field:{'a':7,'b':8}}}}},{id:1,info:{$elemMatch:{field:{'a':7,'b':8}});,谢谢@hecnabae