如何在monogdb中找到两个集合的交集?

时间:2019-03-11 05:29:22

标签: php mongodb aggregation-framework phalcon

假设我有2个收藏夹

第一个:-

  

db.product_main

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

由大约10000个对象(数组)组成,唯一字段是source_id。

第二个:-

  

db.product_id

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

由约500个组成,并且仅包含字段“ product_id”,该字段等于db.product_main的“ source_id”

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

  

db.product_main.aggregate({any query})

2 个答案:

答案 0 :(得分:1)

只需使用查找阶段来查找与“ 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
      }
    }
  }
])

答案 1 :(得分:0)

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

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