MongoDB查询包含至少一个数组中指定值的文档

时间:2014-02-16 14:53:10

标签: mongodb mongodb-query

我在MongoDB中有一个结构如下:

[
  {
    "_id": ObjectId("51bf000a3d489f2df59aa4c6"),
    "courses": ["course1", "course2"]
  }, {
    "_id": ObjectId("52cc789a4df828450c16e52c"),
    "courses": ["course3", "course4"]
  }
]

我希望能够使用["course1", "course3"]这样的数组查询这两个文档,其中"course1"与第一个匹配,"course3"匹配第二个文档。

如果没有像这样的复杂查询,这可能吗?

{
  "$or": [
    { "courses": "course1" },
    { "courses": "course3" }
  ]
}

抱歉我的英语不好!

2 个答案:

答案 0 :(得分:0)

以下查询等于您:
db.coll.find({ courses: { $in: ["course1", "course3"] } })

答案 1 :(得分:0)

如果您想进一步处理结果集,您还可以使用聚合并根据需要调整结果。

db.courses.aggregate([
            {$unwind:"$courses"},
            {$match:{$or:[{courses:"course1"},{courses:"course3"}]}},
            {$project:{_id:0, courses:1}}
    ]);

或使用$ in运算符,如下所示:

db.courses.aggregate([
        {$unwind:"$courses"},
        {$match:{courses:{$in:["course1","course3"]}}},
        {$project:{_id:0, courses:1}}
        ])