我已经问过这个问题,但是由于某种原因,有人将其标记为该$ lookup多个级别的副本,而没有$ unwind吗?而且我不明白为什么,我的预期输出是直接填充“租户”字段,并且在针对性文章中,它为汇总结果创建了一个新条目,而不是直接填充列。
但是,这里再次出现:
-房间集合
_id: ObjectId(********)
bedspaces: Array
0: ObjectId("5c98d89c6bd5fc26a4c2851b")
1: ObjectId("5c98d89f6bd5fc26a4c28522")
***
***
-床铺
_id: ObjectId(*********);
number: 1
decks: Array
0: Object
_id: ObjectId("5c98d89c6bd5fc26a4c28520")
number: 1,
tenant: ObjectId("5c964ae7f5097e3020d1926c")
****
1: Object
_id: ObjectId("5c98d89c6bd5fc26a4c2851e")
number: 1,
tenant: ObjectId("5c964b2531bc162fdce64f15")
****
-租户集合
_id: ObjectId("5c964ae7f5097e3020d1926c")
name: "john doe"
age: 11,
_id: ObjectId("5c964b2531bc162fdce64f15")
name: "jane doe"
age: 12,
这是我的汇总:
{
from: 'beds',
let: { bedspaces: "$bedspaces"},
pipeline: [
{
$match: {
$expr: {
$in: ["$_id", "$$bedspaces"]
}
}
},
{
$lookup: {
from: 'tenants',
let: {tenant: "$decks.tenant"},
pipeline: [
{
$match: {
$expr: {
$in: ["$_id", "$$tenant"]
}
}
}
],
as: 'tenant',
}
}
],
as: 'bedspaces'
}
输出:在此处输入图像描述
我想要的是用其匹配的_id租户集合填充租户字段。
PS这有可能吗?
如果您已阅读该答案,则可能会得到重复的原因。
同时,您可以使用下面的汇总,但如果您仍然可以通过该答案及其说明,则更好。
Room.aggregate([
{ "$lookup": {
"from": "beds",
"let": { "bedspaces": "$bedspaces" },
"pipeline": [
{ "$match": { "$expr": { "$in": [ "$_id", "$$bedspaces" ] } } },
{ "$unwind": "$decs" },
{ "$lookup": {
"from": "tenants",
"let": { "tenant": "$decks.tenant" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$tenant" ] } } }
],
"as": "decks.tenant"
}},
{ "$unwind": "$decks.tenant" },
{ "$group": {
"_id": "$_id",
"decks": { "$push": "$decs" },
"number": { "$first": "$number" }
}}
],
"as": "bedspaces"
}}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句