mongodb - 没有本地的聚合查找

Posted

技术标签:

【中文标题】mongodb - 没有本地的聚合查找【英文标题】:mongodb - aggregate lookup without local 【发布时间】:2019-06-25 15:48:58 【问题描述】:

所以我有两个 ObjectIds 位于不同的集合中,我想将它们合并为输出。所以这就像在没有任何本地字段的情况下使用 $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

【问题讨论】:

【参考方案1】:

你可以使用下面的聚合

您无需在较新的$lookup 语法中指定localField。只需在$lookup聚合的子管道内使用$match

db.main_document.aggregate([
   "$match":  "_id": ObjectId(first) ,
   "$lookup": 
    "from": "subdocument",
    "pipeline": [
       "$match":  "_id": ObjectId(second) ,
    ],
    "as": "subdocument"
  ,
   "$unwind": "$subdocument" 
])

【讨论】:

以上是关于mongodb - 没有本地的聚合查找的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb启动命令mongod参数说明

MongoDB聚合(aggregate)常用操作及示例

MongoDB 查找与聚合性能

带有大量文档的 MongoDb 聚合查找?

带有大量文档的 MongoDb 聚合查找?

MongoDB聚合查找和展开[重复]