mongodb查找检索没有子项的父对象

时间:2017-09-12 20:17:47

标签: node.js mongodb mongoose

我对mongodb中的查询中的问题有疑问: 我无法检索没有儿童团体的调查 有关更多信息,请查看以下链接:

$lookup from Multiple Collections, and nested output

Survey.aggregate([
                    { "$lookup": {
                    "from": "groups",
                    "localField": "_id",
                    "foreignField": "survey",
                    "as": "groups"
                }},
                 { "$unwind": "$groups" },
                    { "$lookup": {
                    "from": "questions",
                    "localField": "groups._id",
                    "foreignField": "group",
                    "as": "groups.questions"
                }},
                    { "$unwind": "$groups.questions" },
                    { "$lookup": {
                    "from": "response",
                    "localField": "groups.questions._id",
                    "foreignField": "question",
                    "as": "groups.questions.responses"
                }},
                { "$group": {
                    "_id": {
                        "_id": "$_id",
                        "company": "$company",
                        "created_date": "$created_date",
                        "enabled": "$enabled",
                        "name": "$name",
                        "groups": {
                            "_id": "$groups._id",
                            "name": "$groups.name",
                            "order": "$groups.order",
                            "created_date": "$groups.created_date",
                            "survey": "$groups.survey"
                        }
                    },
                    "questions": { "$push": "$groups.questions" }
                }},
                { "$sort": { "_id": 1 } },
                { "$group": {
                    "_id": "$_id._id",
                    "company": { "$first": "$_id.company" },
                    "created_date": { "$first": "$_id.created_date" },
                    "enabled": { "$first": "$_id.enabled" },
                    "name": { "$first": "$_id.name" },
                    "groups": {
                        "$push": {
                            "_id": "$_id.groups._id",
                            "name": "$_id.groups.name",
                            "order": "$_id.groups.order",
                            "created_date": "$_id.groups.created_date",
                            "survey": "$_id.groups.survey",
                            "questions": "$questions"
                        }
                    }
                }},
                { "$sort": { "_id": 1 } }
            ]

2 个答案:

答案 0 :(得分:1)

您的查询没有问题。但是每当你用空数组文件展开文档时,展开就完全删除文档。这就是你没有得到结果的原因。

您可以通过将preserveNullAndEmptyArrays设置为null来解决您的问题。

{
  $unwind:
    {
      path: <field path>, // add your unbind doc from lookup pipeline.
      preserveNullAndEmptyArrays: true
    }
}

答案 1 :(得分:0)

Yesss,你救了我的一天,谢谢你我更新了查询,而且工作正常

Survey.aggregate([
                    { "$lookup": {
                    "from": "groups",
                    "localField": "_id",
                    "foreignField": "survey",
                    "as": "groups"
                }},
                 { "$unwind": {
                     path: "$groups",
                     preserveNullAndEmptyArrays: true
                 } },
                    { "$lookup": {
                    "from": "questions",
                    "localField": "groups._id",
                    "foreignField": "group",
                    "as": "groups.questions"
                }},
                    { "$unwind": {
                        path: "$groups.questions",
                        preserveNullAndEmptyArrays: true
                    } },
                    { "$lookup": {
                    "from": "response",
                    "localField": "groups.questions._id",
                    "foreignField": "question",
                    "as": "groups.questions.responses"
                }},
                { "$group": {
                    "_id": {
                        "_id": "$_id",
                        "company": "$company",
                        "created_date": "$created_date",
                        "enabled": "$enabled",
                        "name": "$name",
                        "groups": {
                            "_id": "$groups._id",
                            "name": "$groups.name",
                            "order": "$groups.order",
                            "created_date": "$groups.created_date",
                            "survey": "$groups.survey"
                        }
                    },
                    "questions": { "$push": "$groups.questions" }
                }},
                { "$sort": { "_id": 1 } },
                { "$group": {
                    "_id": "$_id._id",
                    "company": { "$first": "$_id.company" },
                    "created_date": { "$first": "$_id.created_date" },
                    "enabled": { "$first": "$_id.enabled" },
                    "name": { "$first": "$_id.name" },
                    "groups": {
                        "$push": {
                            "_id": "$_id.groups._id",
                            "name": "$_id.groups.name",
                            "order": "$_id.groups.order",
                            "created_date": "$_id.groups.created_date",
                            "survey": "$_id.groups.survey",
                            "questions": "$questions"
                        }
                    }
                }},
                { "$sort": { "_id": 1 } }
            ]