Mongo:是否有可能满足两个文件的“和”条件

时间:2016-07-07 18:36:05

标签: mongodb logical-operators

说我有两个文件

/*1*/
{
"id":1,
"name":"natty",
"subject_enrolled":"english"
}
/*2*/
{
"id":2,
"name":"natty",
"subject_enrolled":"science"
}

理想情况下,它应该是同一个文档,subject_enrolled是一个包含两个主题的数组。但由于某种原因,我保持我的数据平坦。 现在,我想写一个查询,它将检索所有已注册“英语”和“科学”的学生。

我尝试了以下查询:

db.students.find({"subject_enrolled":{"$in":["science", "english"]}})

但这是错误的,因为任何只注册科学的学生也会参与其中。我不能使用“全部”,因为科学和英语都在两个不同的文件中。

有没有办法轻松有效地实现这一目标?

1 个答案:

答案 0 :(得分:0)

我现在想到的只是使用聚合。

db.students.aggregate([{"$group":{"_id":"$name", "subject_enrolled":{"$addToSet":"$subject_enrolled"}}}, {"$match":{"subject_enrolled":{"$all":["english", "science"]}}}])

这完全符合我的条件。

但我只担心表现。如果我说10,000个文件,最糟糕的情况是我的所有文件都是针对个别学生的,而查询Param也是一个单一的价值,那么我将会聚合不好!

Mongo专家,请分享您对我的情况的看法。