【问题标题】:Unable to perform complex nesting in mongodb queries?无法在 mongodb 查询中执行复杂的嵌套?
【发布时间】:2020-10-07 00:40:04
【问题描述】:

如何在mongodbquery中进行完全嵌套

【问题讨论】:

    标签: node.js mongodb mongodb-query mongoose-schema


    【解决方案1】:

    有很多方法可以做到这一点,这里是一个嵌套$lookup的例子:

    [
        {
            '$lookup': {
                'from': 'questionsanwereds',
                'let': {id: '$_id'},
                "pipeline": [
                    {
                        $match: {
                            $expr: {
                                $eq: ["$$id", "$reqId"]
                            }
                        }
                    },
                    {
                        $unwind: "$questions"
                    },
                    {
                        $lookup: {
                            from: "questions",
                            localField: "questions.questionId",
                            foreignField: "_id",
                            as: "questionObj"
                        }
                    },
                    {
                        "$unwind": "$questionObj"
                    },
                    {
                        $group: {
                            _id: "$_id",
                            questions: {
                                $push: {
                                    comment: "$comment",
                                    name: "$questionObj.name",
                                    optionSelected: "$optionSelected"
                                }
                            }
                        }
                    }
                ],
                'as': 'questionsAnswereds'
            }
        },
        {
            '$unwind': {
                'path': '$questionsAnswereds'
            }
        }
    ]
    

    策略是分别填充每个问题的名称,然后分组以恢复所需的结构。

    【讨论】:

    • 感谢您的帮助,但收到 {"message":"FieldPath 字段名称可能不以 '$' 开头。"}
    • 这是嵌套查找中的一个小语法错误。从localField 中删除$
    • 在嵌套对象中仍然得到一个空值``` { $unwind: "$questions" } ```我认为是因为这个
    • 我在那里使用了您的代码并依赖于您的架构。确保第一个 lookup 首先成功(仅使用管道中的 $match )。根据您发布的内容应该是。
    • 在第一次查找中,直到 $group 工作正常,但在应用组时,结果集变为空。我应该放置我的查询然后附加到它。否则 jst 只放入你的代码聚合体
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多