javascript - mongodb - 没有本地的聚合查找

标签 javascript mongodb mongoose mongodb-query aggregation-framework

所以我有两个位于不同集合中的 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

最佳答案

您可以使用以下聚合

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

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

关于javascript - mongodb - 没有本地的聚合查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473202/

相关文章:

node.js - 当我使用 mongoose 连接到 MongoDB 3.6 时,“admin”$db 总是加载

node.js - 使用 promises 在 Node.js + Express 中处理错误

arrays - 如何仅在 Mongoose 中使用聚合来填充嵌套在对象数组中的字段?

javascript - 如何将数组的每个元素添加到 React 状态

javascript - 在输入参数无效的情况下对 Promise 进行单元测试

mongodb - 如何在最近时间的集合中查找排序/查询

MongoDB Doctrine : $in needs an array - Many to Many Relation

javascript - JavaScript 中的 Beget 函数 : The Good Parts

javascript - 三个JS拖动控件Uncaught TypeError : Cannot set property 'x' of undefined

javascript - Node.js - Mongodb - Mongoose /无法将数组字符串传递到 $push 字段中