【问题标题】:how to do aggregation in nodejs如何在nodejs中进行聚合
【发布时间】:2020-05-27 17:29:15
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    关于如何在 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}
            }
        }
    ])
    

    【讨论】:

    • 能否请您也评论一下变量的范围,例如此集合的subjectName字段..等
    猜你喜欢
    • 2019-05-13
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多