node.js - 如何使用 nodejs 从 mongodb 中的不同集合中聚合数据?
问题描述
我正在使用 mongoDB 和 nodejs 我有 4 个集合 集合 1 是教师,字段为teacher_id,teacher_name 集合 2 是主题,字段为 _id,subject_name 集合 3 是书,字段为 book_id,book_name
集合是具有字段的学生 -- _id、学生姓名、教师 ID、主题 ID、书籍 ID
如何同时从 1、2、3 个集合中获取 id 并插入到集合中的相应 id
我尝试了一些总是要求匹配字段的函数......即使没有匹配字段,是否有任何函数可以从集合中返回数据?
有人可以帮忙吗
解决方案
那么,在这种情况下,您需要从这些集合中获取所有文档。这将是一个有点昂贵的聚合,但我在代码中添加:
首先,我对 null 进行分组,以避免将查找值附加到教师集合中的每个文档。
db.teacher.aggregate([
{
$group:{
"_id":null,
"root":{
$push:"$$ROOT"
}
}
},
{
$lookup:
{
from:"subject",
pipeline: [],
as: "subjectLookup"
}
},
{
$lookup:
{
from:"book",
pipeline: [],
as: "bookLookup"
}
},
{
$lookup:
{
from:"student",
pipeline: [],
as: "studentLookup"
}
}
]).pretty()
这些查找将给出包含来自各个集合的所有文档的数组,您可以通过$match
在查找阶段的管道中添加阶段来限制文档。
希望这能解决你的问题:)
推荐阅读
- python-3.7 - write() 在 Python 中不接受关键字参数
- video - Flutter 应用程序是否可以将应用程序内播放的视频移交给 Apple 或三星电视?
- angularjs - ng-repeat 在 6 个不同的框中显示 6 个不同的值
- symfony - 在 Symfony 4.3 中使用邮件程序-> 预期响应代码“250”但得到代码“535”,消息“535-5.7.8 用户名和密码不被接受
- javascript - 当我运行响应命令时,我试图防止谷歌表格中的重复电子邮件响应
- c# - 如果给定名称已经存在,如何为 docker 容器名称添加后缀?
- c++ - 为什么一个接一个声明的两个变量在内存中不相邻?
- google-analytics - 平均 添加到购物车产品的产品列表位置
- google-apps-script - 重命名 Google 表单上传的文件
- google-apps-script - 如何处理我的 Google 表格脚本中的循环,以便多个(但不是全部)脚本使用一个命令运行?