我正在尝试搜索使用逻辑AND和OR的不同组合完成课程的学生列表。
例如,我想让学生完成(“课程1”和“课程2”)或“课程3”
这是我给每个学生的数据结构:
{
"_id" : ObjectId("5c68841cb6b18f31975c8fb0"),
"courses" : [
"Course 1", "Course 4"
]
}
这是我的代码:
db.getCollection('users').aggregate([
{
$match: {
"courses": {
$or: {
$all: ["Course 1","Course 2"],
$in : ["Course 3"]
}
}
}
}
])
我尝试嵌套不同的运算符($all
,$in
,$and
,$or
),但失败了。
答案 0 :(得分:3)
实际上$or
是顶级运算符,您以错误的方式使用了它
db.collection.aggregate([
{ "$match": {
"$or": [
{ "courses": { "$all": ["Course 1", "Course 2"] }},
{ "courses": { "$in": ["Course 3"] }}
]
}}
])