如何在nodejs中进行聚合

时间:2020-05-27 17:29:15

标签: node.js mongodb

我必须获取一条记录,该记录具有我提供的名称字段和另一个我拥有subjectId的集合的subjectname字段-例如,我想获取一个具有name萝拉和subjectname作为物理学的学生记录(但是问题是我和subjectname在一起,但是收集的学生具有该主题的字段ID,该字段ID已保存到某些其他集合中的主题为--with _id --- subject _id作为学生记录中的外地字段,我有学生姓名和科目名称,如何访问具有相应字段的学生?

1 个答案:

答案 0 :(得分:0)

关于如何在Mongo中执行此操作,您有两种选择,我个人建议选择1号,因为这样会更加高效。

  1. 将其分为两个查询:
let subject = await subjectCollection.findOne({name: subjectname});
// add validation that subject exists in case needed.
let doc = await firstCollection.findOne({name: name, subjectId: subject._id})
// you can use `find` instead if multiple documents can be matched.
  1. 使用$lookup
firstCollection.aggregate([
    {
        $match: {
            name: name
        }
    },
    {
        $lookup: {
            from: "subject_collection",
            let: {subjectName: subjectName},
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $eq: ["$$subjectName", "$name"]
                        }
                    }
                }  
            ],
            as: "subjects"
        }
    },
    {
        $match: {
            "subjects.0": {$exists: true}
        }
    }
])