因此,我有两个ObjectId
处于不同的集合中,我希望将其合并为输出。因此,就像使用$lookup
函数而没有任何本地字段一样。没有聚合,我可以简单地执行两个.findOne
,但这将需要两个API调用(这将创建两个连接)。有可能一并实现吗?
因此,如果没有聚合,它将看起来像这样:
let main_document =
db.findOne({
_id: ObjectId(first)
})
let subdocument =
db.findOne({
_id: ObjectId(second)
})
main_document.subdocument = subdocument
return main_document
最佳答案
您可以使用以下汇总
您无需在较新的localField
语法中指定$lookup
。只需在$match
聚合的子管道内使用$lookup
db.main_document.aggregate([
{ "$match": { "_id": ObjectId(first) }},
{ "$lookup": {
"from": "subdocument",
"pipeline": [
{ "$match": { "_id": ObjectId(second) }},
],
"as": "subdocument"
}},
{ "$unwind": "$subdocument" }
])