我对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 } }
]
答案 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 } }
]