Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查询包含至少一个数组中指定值的文档_Mongodb_Mongodb Query - Fatal编程技术网

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

MongoDB查询包含至少一个数组中指定值的文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我在MongoDB中有一个集合,其结构如下: [ { "_id": ObjectId("51bf000a3d489f2df59aa4c6"), "courses": ["course1", "course2"] }, { "_id": ObjectId("52cc789a4df828450c16e52c"), "courses": ["course3", "course4"] } ] 我希望能够使用类似于[“course1”,“course3”]的数

我在MongoDB中有一个集合,其结构如下:

[
  {
    "_id": ObjectId("51bf000a3d489f2df59aa4c6"),
    "courses": ["course1", "course2"]
  }, {
    "_id": ObjectId("52cc789a4df828450c16e52c"),
    "courses": ["course3", "course4"]
  }
]
我希望能够使用类似于
[“course1”,“course3”]
的数组来查询这两个文档,其中
“course1”
匹配第一个文档,
“course3”
匹配第二个文档

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

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

对不起,我的英语很差

以下查询等于您的:

db.coll.find({courses:{$in:[“course1”,“course3”]}})

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

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}}
        ])

非常感谢。我读过
$in
操作符,但不知道它也适用于数组。如果这是一个频繁的查询,请确保在集合中添加
课程
的索引。