查询文档嵌套多数组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
}
}
]
}
您必须使用聚合框架来获取子文档的idtrydb.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