如何根据文档中的两个数组元素返回文档?

时间:2016-04-12 19:24:19

标签: mongodb mongodb-query

我对mongodb中的聚合概念比较新。在我的文档中,有一个数组。我尝试了$ match,$ unwind,$ group来拉取一个在数组中有两个给定值的文档。我想写的没有帮助..这是样本

文件:

{Name:"Kal",    Class: "2", Subject: ["Physics", "English", "Maths"]},
{Name:"Matt",   Class: "1", Subject: ["Physics", "English"]},
{Name:"Kim",     Class: "1", Subject: ["Physics", "Spanish"]},
{Name:"Bud",    Class: "2", Subject: ["Physics", "German"]},
{Name:"Roger",  Class: "2", Subject: ["Physics", "French"]},
{Name:"Kate",   Class: "1", Subject: ["English"]}

从这些文件中,我需要提取一个包含" Class:1"和'主题["物理","英语"]'

所以,如果我正确地编写了我的查询(或聚合),我应该从上面提取第二个文档。

这就是我所拥有的

db.Student.aggregate([{"$match": {"Class": "1",}},{"$unwind":    "$Subject"},{"$match": {"Subject": "Physics"}},{"$match": {"Subject": "English"}} ]).pretty()
好吧,上面的聚合并没有让我得到任何回报,所以我尝试使用$并将两者结合起来' Physics'和'英语',但我得到了' $并且不是舞台操作员'错误。

我也尝试过以下聚合,但我什么都没回来。

db.Student.aggregate([{"$match": {"Class": "1",}},{"$match": {"Subject": ["Physics", "English"]}} ]).pretty()

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您不需要聚合框架来执行此操作。只需使用.find()方法:

如果您希望那些“Physics”和“English”在“Subject”数组中的文档,那么您需要使用$all运算符。

db.Students.find( { "Subject": { "$all": [ "Physics", "English" ]  } } ) 

要返回仅存在这些主题的文档,您需要使用$size运算符。

db.Students.find( { "Subject": { "$all": [ "Physics", "English" ]  }, "Subject": { "$size": 2 } } )