node.js - 如何在nodejs for mongodb中为te以下上下文编写聚合查询
问题描述
我想编写一个查询来从 mongodb 中获取数据,我有三个集合——书籍、教师、学生。图书收藏有bookName 和_id,教师收藏有--teacherName 和teacherId,学生收藏有_id、studentName、teacherId……。我有studentName作为S1,teacherName作为T1,我怎样才能从学生集合中获取名称为S1的学生记录,其中teacherId作为名称T1(来自教师集合)......例如,我需要从书籍集合以及我必须申请的教师和学生中获取具有名称的书籍_id,从studentName = S1和teacherId =(select techer ID from techer where teacherName = T1)中选择_id ...我如何在节点中编写此查询使用聚合——下面是我的代码,有人可以帮我更正我的代码
books.aggregate([{
'$match': {
'name': 'book1'
}
}, {
'$lookup': {
{
from: students,
'$match': {
'name': 'Annie'
}
},
'from': 'teachers', // collection name of the teachers
'localField': 'teacherId',
'foreignField': '_id',
'as': 'teachers'
}
}, {
'$match': {
'teachers': {
'$elemMatch': {
'teacherName': 'Jones'
}
}
}
}])
例如..
books
ID1, physics
ID2, chemistry
tecaher
t1, zed
t2, tom
student
s1, annie, zed(//teacher name)
s2, john, zed
s3, leya, tom
我已经插入了书籍和教师收藏,现在我必须获取学生记录,它的名称为 s1,teacherid 作为教师收藏的 zed id,但需要 techer 收藏中 techer Zed 的 id 和 id来自书籍收藏的物理书......所以我开始喜欢books.agregate(匹配书名)然后查找学生 - 但学生只有老师的名字,我必须从老师收藏中找到老师ID......我必须在学生记录中插入 id、name、teacherid
解决方案
您$lookup
以错误的方式使用运算符,请参阅此处以获取更多信息和示例。
以下查询将对您有所帮助:
db.student.aggregate([
{
$lookup: {
from: "teacher",
localField: "teacher_name",
foreignField: "name",
as: "teacher_details"
}
},
{
$unwind: "$teacher_details"
},
{
$project: {
name: 1,
teacher_id: "$teacher_details._id"
}
}
])
输出:
[
{
"_id": "s1",
"name": "annie",
"teacher_id": "t1"
},
{
"_id": "s2",
"name": "john",
"teacher_id": "t1"
},
{
"_id": "s3",
"name": "leya",
"teacher_id": "t2"
}
]
推荐阅读
- angular - 如何在 ASP.NET Core 中配置 API 以访问 http 请求?
- ios - 如何更改 MDCTextField 占位符文本颜色?
- android - 在运行 Oreo 和 Pie 的设备中如何在锁定屏幕上覆盖布局
- java - 用户输入减量或加量
- docker - 如何使用 docker-compose.yml 在容器内自动启动应用程序
- angular - 在我的自定义 NPM 库上构建 AOT 模式时出错
- r - 如果所有计算都相同,如何按组优化 dplyr 代码
- javascript - user[age] 在这里如何“未定义”(错误),而 user[name] 是如何定义的?
- javascript - Bootstrap4:有没有办法嵌套引导程序“btn-toolbar”以使其在较小的屏幕上可滚动 x 轴?
- java - (.) 的功能是什么,或者换句话说,句点的作用是什么?