MongoDB查询包含至少一个数组中指定值的文档
我在MongoDB中有一个集合,其结构如下:MongoDB查询包含至少一个数组中指定值的文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我在MongoDB中有一个集合,其结构如下: [ { "_id": ObjectId("51bf000a3d489f2df59aa4c6"), "courses": ["course1", "course2"] }, { "_id": ObjectId("52cc789a4df828450c16e52c"), "courses": ["course3", "course4"] } ] 我希望能够使用类似于[“course1”,“course3”]的数
[
{
"_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
操作符,但不知道它也适用于数组。如果这是一个频繁的查询,请确保在集合中添加课程
的索引。