我的mongodb中有两个集合,分别是“ teacher”和“ course”,结构如下所示:
{
"rating": 4,
"teacher_id": "123",
"course_count": 1,
},
{
"rating": 5,
"teacher_id": "456",
"course_count": 4,
}
{
"teacher_id": "123",
"advanced": true,
},
{
"teacher_id": "456",
"advanced": false,
}
我要搜索的是哪门课程的老师教授少于2门课程,而该课程的高级课程为True。
{
"teacher_id": "123",
"advanced": true,
}
db.getCollection('course').aggregate([
{"$limit": 10 },
{ "$lookup" : {
"localField": "teacher_id" ,
"from": "teacher" ,
"foreignField": "teacher_id" ,
"as": "teacher"
}},
{"$unwind": {path: '$teacher', preserveNullAndEmptyArrays: true}},
{'$match': {
'advanced': true,
'teacher.course_count': {'$lt': 2}
}}
])
但是似乎没有用,有人可以帮助我吗?谢谢!
答案 0 :(得分:2)
尝试这个:
db.course.aggregate([
{
"$match": {
"advanced": true
}
},
{
"$lookup": {
"from": "teacher",
"localField": "teacher_id",
"foreignField": "teacher_id",
"as": "teacher"
}
},
{
"$match": {
"teacher.course_count": {
"$lt": 2
}
}
},
{
"$project": {
"_id": 0,
"advanced": 1,
"teacher_id": 1
}
},
{
"$limit": 10
}
])
注意:如果您需要访问teacher
数组内容,则可以使用$unwind
+ $project
或$let
运算符。让我知道此解决方案是否满足您的要求