如何在MongoDB中搜索子数组

如何在MongoDB中搜索子数组,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有这个MongoDB系列: { "_id" : ObjectId("123"), "from_name" : "name", "from_email" : "email@mxxxx.com", "to" : [ { "name" : "domains", "email" : "domains@xxx.com" } ], "cc" : [ ], "subject" : "mysubject" } 我的目标是通过“to”和一些电子邮件在这个集合中搜索。如果您只需要一个字段,那么MongoD

我有这个MongoDB系列:

{ "_id" : ObjectId("123"), "from_name" : "name", "from_email" : "email@mxxxx.com", "to" : [  {  "name" : "domains",  "email" : "domains@xxx.com" } ], "cc" : [ ], "subject" : "mysubject" }

我的目标是通过“to”和一些电子邮件在这个集合中搜索。

如果您只需要一个字段,那么MongoDB就可以访问嵌套元素:

db.collection.find({“to.email”):domains@example.com" })
这将返回符合以下条件的文档:

对于多个字段作为条件,请使用
$elemMatch
运算符

db.collection.find(
{“to”:{
“$elemMatch”:{
“电子邮件”:domains@example.com",
“名称”:“域”,
}
}}
)
您可以“投影”一个匹配项以仅返回该元素:

db.collection.find({“to.email”):domains@example.com“},{”to.$”:1})
但是,如果您希望匹配的元素多于一个,那么您可以使用聚合框架:

db.collection.aggregate([
//匹配包含此内容的“文档”
{“$match”:{“to.email”:”domains@example.com" } },
//反规范化数组
{“$unwind”:“$to”},
//只匹配那些匹配的元素
{“$match”:{“to.email”:”domains@example.com" } },
//甚至可以回到一个单一的文件
{“$组”:{
“\u id”:“$\u id”,
“from_name”:{“$first”:“$name”},
“to”:{“$push”:“$to”},
“主题”:{“$first”:“$subject”}
}}
])

如果需要,所有有趣的方法都可以匹配和/或“过滤”数组内容以进行匹配。

非常感谢。回答得很好。