首页 > 解决方案 > 根据第一个的 id 过滤第二个集合后组合 2 个集合

问题描述

我有 2 个这样的集合:

批次:

{
  "userId": "",
  "productId: "",
}

产品:

{
   "_id": "",
   "name": "",
}

我想要做的是userId首先过滤批次。然后获取我在批次的过滤元素中获得 id 的所有产品。我见过很多例子,但大多是相反的。

我的最终结果是这样的:

[{
   name: "product 1",
   batches: [...]
}]

标签: mongodb

解决方案


您可以尝试使用聚合管道查找

  • $lookup在分支集合中,传入productIdlet并匹配 forproductId和 filter的表达式条件userId
db.products.aggregate([
  {
    $lookup: {
      from: "branches",
      let: { productId: "$_id" },
      pipeline: [
        {
          $match: {
            userId: "1", // filter user id here
            $expr: { $eq: ["$$productId", "$productId"] }
          }
        }
      ],
      as: "brnaches"
    }
  }
])

操场


推荐阅读