首页 > 解决方案 > 具有嵌套 ID 数组的 Mongo 聚合

问题描述

我有一个Model类似于这样的结构:

{
  "_id": ObjectId("5c878c5c18a4ff001b981zh5"),
  "books": [
    ObjectId("5d963a7544ec1b122ab2ddc"),
    ObjectId("5d963be01f663d168f8ea4dc"),
    ObjectId("5d963bcb1f663d168f8ea2f4"),
    ObjectId("5d963bdf1f663d16858ea7c9"),
}

现在我想使用聚合框架来获取仅包含已填充书籍的列表,例如:

{ _id: ObjectId("5d963a7544ec1b122ab2ddc"), title: ...., ... },
 ..

标签: arraysnode.jsmongodbmongooseaggregation-framework

解决方案


.aggregate([
  {
    $lookup: {
      from: 'books',
      let: { books: '$books' },
      pipeline: [{ $match: { $expr: { _id: { $in: ['_id', '$$books'] } } } }],
      as: 'bookInfos'
    }
  },
  { $unwind: '$bookInfos' },
  { $replaceRoot: { newRoot: '$bookInfos' } }
])

我不太确定你的问题,但我认为这可能是你正在寻找的。


推荐阅读