首页 > 解决方案 > 如何使用 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

我尝试了一些总是要求匹配字段的函数......即使没有匹配字段,是否有任何函数可以从集合中返回数据?

有人可以帮忙吗

标签: node.jsmongodbcollectionsfindaggregation-framework

解决方案


那么,在这种情况下,您需要从这些集合中获取所有文档。这将是一个有点昂贵的聚合,但我在代码中添加:

首先,我对 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在查找阶段的管道中添加阶段来限制文档。

希望这能解决你的问题:)


推荐阅读