【发布时间】:2020-06-11 14:56:58
【问题描述】:
我试图弄清楚如何通过特定字段查找对象数组,同时保留与查找字段处于同一级别的其他字段。
我的processes收藏如下:
{
_id: 'p1',
steps: [
{
_id: 'ps1',
step: 's1',
time: 10
},
{
_id: 'ps2',
step: 's2',
time: 15
}
]
}
steps 集合看起来像(对于带有_id: s1 的文档):
{
_id: 's1',
name: 'step 1'
}
我的聚合:
processes.aggregate([
{
// match stage or whatever prior stage
},
{
$lookup: {
from: 'steps',
localField: 'steps.step',
foreignField: '_id',
as: 'steps'
}
}
])
这可行,但基本上会删除与查找字段 (steps.step) 处于同一级别的 steps._id 和 steps.time 字段,如输出所示:
{
_id: 'p1',
steps: [
{
_id: 's1',
name: 'step 1'
},
{
_id: 's2',
name: 'step 2'
}
]
}
虽然预期的输出是:
{
_id: 'p1',
steps: [
{
_id: 'ps1',
time: 10,
stepId: 's1',
name: 'step 1',
},
{
_id: 'ps2',
time: 15,
stepId: 's2',
name: 'step 2',
}
]
}
注意:预期输出中的_id字段不是很重要,可以包含step文档的_id,避免有单独的stepId 字段。
编辑
其他问题移至此处:MongoDB lookup array of objects by field (join conditions and uncorrelated sub-queries)
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework