如何在 mongodb 中找到两个 Collection 的交集?

How to find Intersection of Two Collection in monogdb?

比方说,我有 2 collection

第一个:-

db.product_main

{
  _id:123121,
  source_id:"B4456dde1",
  title:"test Sample",
  price: 250
  quantity: 40
}

由大约 ~10000 objects(数组)组成,唯一字段是 source_id.

第二个:-

db.product_id

{
  "_id":58745633,
  "product_id":"B4456dde1"
}

由 ~500 组成,只有字段 "product_id" 等于 "source_id" of db.product_main

现在,我想将两个 collection 相交,以便我只找到 db.product_id 中不存在的那些。

db.product_main.aggregate({any query})

只需使用查找阶段查找与 'product_main' 集合关联的产品,然后匹配空数组(即未找到 product_id 的记录)

db.product_main.aggregate([
  {
    $lookup: {
      from: "product_id",
      localField: "source_id",
      foreignField: "product_id",
      as: "products_available"
    }
  },
  {
    $match: {
      products_available: {
        $size: 0
      }
    }
  }
])

On WRITE 使用聚合管道的操作您还可以使用 $out 命令直接卸载统计更新并将缓存结果存储在 product_stats 集合中(例如)。

稍后在 web/ui/api READ 操作中仅使用此缓存集合。当然,您可以为缓存和非缓存结果创建数据库查询方法。