猫鼬聚合管道查找和嵌套对象

安德烈·吉马良斯·皮尔

我想和你分享我的问题。

因此,我有3个需要在查询中访问的实体:

评价:

    [
        {
            _id: 1,
            questionary: 1,
            subject: 1
        },
        {
            _id: 1,
            questionary: 1,
            subject: 2
        },
    ] 

用户

[
    {
        _id: 1
        name: "John Doe",
        photo: "photo1.jpg"
    },
        {
        _id: 2
        name: "Paul Smith",
        photo: "photo2.jpg"
    },
]

疑问的

[
    {
        _id: 1,
        title: "questionary 1",
        "date": "2020-02-08T00:00:00.000Z" 
    },
    {
        _id: 2,
        title: "questionary 2",
        "date": "2020-02-09T00:00:00.000Z" 
    }
]

所以我的目标是获取这样的数据:其中的问题清单,与问题相关的评估清单以及评估中我需要一个用户对象。像这样:

    [
        {
            "_id": "1",
            "title": "questionary 1",
            "evaluations": [
                {
                    "_id": "1",
                    "date": "2020-04-05T18:53:46.948Z"
                    "user": {
                        _id: 1,
                        "name": "John Doe",
                        "photo": "photo1.jpg"
                    }
                },
                {
                    "_id": "2",
                    "date": "2020-04-06T18:53:46.948Z",
                    "user": {
                        _id: 1,
                        "name": "John Doe",
                        "photo": "photo1.jpg"
                    }
                }
            ]
        }
    ]

我的查询是:

return await Questionary.aggregate([{
      $lookup: {
        from: "evaluation", 
        localField: "_id",  
        foreignField: "questionary", 
        as: "evaluations",
      }
    },
    {
      $lookup: {
        from: "user",
        localField: "evaluations.user",
        foreignField: "_id",
        as: "user",
      }
    },
    { 
        $project: {
            _id: 1,
            title: 1,
            status: 1,
            evaluations: {
                _id: 1,
                date: 1,
                user: "$user"
            }
        },
    },
]);

我的结果是:

[
    {
        "_id": "1",
        "title": "questionary 1",
        "evaluations": [
            {
                "_id": "1",
                "date": "2020-04-05T18:53:46.948Z"
                "user": [
                    {
                        _id: 1,
                        "name": "John Doe",
                        "photo": "photo1.jpg"
                    },
                    {
                        _id: 2,
                        "name": "Paul Smith",
                        "photo": "photo2.jpg"
                    }
                ]
            },
            {
                "_id": "2",
                "date": "2020-04-06T18:53:46.948Z",
                "user": [
                    {
                        _id: 1,
                        "name": "John Doe",
                        "photo": "photo1.jpg"
                    },
                    {
                        _id: 2,
                        "name": "Paul Smith",
                        "photo": "photo2.jpg"
                    }
                ] 
            }
        ]
    }
]

我的评估用户正在合并,但这不是我想要的,我只想评估内部用户的内部信息。

有什么建议吗?

足够

您应该能够$lookup通过使用不相关的子查询来使用嵌套,如https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-uncorrelated-sub-queries所述

您的情况是:

return await Questionary.aggregate([{
      $lookup: {
        from: "evaluation",
        let: {questId: "$_id"},
        pipeline: [{
          $match: {
            $expr: {
              $eq: ["$$questId", "$questionary"]
            }
          },
        }, {
          $lookup: {
            from: "user",
            localField: "subject",
            foreignField: "_id",
            as: "user",
          }
        }],
        as: "evaluations"
      }
    }
]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

猫鼬聚合$ group与嵌套对象

来自分类Dev

猫鼬聚合查找管道不起作用

来自分类Dev

猫鼬查找和更新嵌套文档

来自分类Dev

如何在猫鼬中聚合嵌套查找数组?

来自分类Dev

猫鼬聚合与组查找

来自分类Dev

猫鼬聚合和求和嵌套的 OBJECT (NOT ARRAY) 字段

来自分类Dev

猫鼬聚合和求和嵌套的 OBJECT (NOT ARRAY) 字段

来自分类Dev

猫鼬填充与对象嵌套

来自分类Dev

猫鼬在嵌套数组上聚合

来自分类Dev

猫鼬聚合排序并限制查找

来自分类Dev

猫鼬和人口嵌套

来自分类Dev

猫鼬错误:参数必须是聚合管道运算符

来自分类Dev

更新猫鼬中的嵌套对象

来自分类Dev

用.populate访问猫鼬的嵌套对象

来自分类Dev

删除嵌套对象引用猫鼬

来自分类Dev

猫鼬保存多层嵌套对象

来自分类Dev

用.populate访问猫鼬的嵌套对象

来自分类Dev

保存嵌套的猫鼬对象数组

来自分类Dev

在猫鼬模式中嵌套对象数组

来自分类Dev

在猫鼬中填充嵌套对象

来自分类Dev

嵌套对象和聚合

来自分类Dev

猫鼬嵌套查询-查找和更新不同文档中的两个字段

来自分类Dev

查找和更新记录-猫鼬

来自分类Dev

猫鼬聚合问题与按嵌套字段分组

来自分类Dev

猫鼬填充与聚合

来自分类Dev

猫鼬与 $in 聚合

来自分类Dev

聚合管道以查找和合并嵌套的文档

来自分类Dev

猫鼬-查找具有任何键和特定子键的对象

来自分类Dev

猫鼬:无法将嵌套对象保存到嵌套模型