mongodb - MongoDB 使用 $lookup、$unwind、$match 进行搜索
问题描述
我的 mongodb 中有 2 个集合,名为“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}
}}
])
但它似乎不起作用,任何人都可以帮助我吗?谢谢!
解决方案
试试这个:
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
运算符。让我知道此解决方案是否满足您的要求
推荐阅读
- python - 使用 np.arange 定义时缺少最终刻度线
- javascript - $refs resetFields 不是函数 AntDesign
- python - 如何使用具有自定义频率和数据折叠的熊猫滚动窗口
- go - 获取 Go 可执行文件 (hugo) 以运行英特尔 Galileo/Quark
- database - Mongo shell 聚合管道错误:“未知运算符:$nor”
- java - 解码无法正确解码
- elasticsearch - 如何忽略弹性搜索查询中的 number_format_exception 错误
- android - MANAGE_EXTERNAL_STORAGE 权限
- winapi - 管道输入时gcc错误的文件描述符错误
- javascript - 将 HTML 输入(文本框和收音机)导出到 CSV 并使用 Javascript 将该 CSV 文件导入到 HTML 输入