从两个集合中如何过滤不匹配的数据

时间:2018-08-20 09:24:39

标签: mongodb aggregation-framework lookup

在DB中,我将som示例数据作为休假 项目(集合名称)

//Object 1
{
    "_id" : 1234,
    "itemCode" : 3001,// (Number)
    "category" : "Biscuts"
}
//Object 2
{
    "_id" : 1235,
    "itemCode" : 3002,// (Number)
    "category" : "Health products"
}

以上是项目集合中的样本数据。因此,有许多对象具有唯一的商品代码。 订单(集合名称)

{
    "_id" : 1456,
    "customer" : "ram",
    "address" : "india",
    "type" : "order",
    "date" : "2018/08/20",
    "orderId" : "999",
    "itemcode" : "3001"//('string')
}

以上是订单示例数据。即使是这个集合,也有许多带有重复商品代码和订单ID的对象。 在应用程序中,我们有一些选项卡,称为未计费项目。因此,在此选项卡中,我们可以看到甚至一次未使用的商品。因此,根据以上数据,我如何显示未使用的物品? 例如:从以上数据中得出的项目代码应为3002,因为该项目甚至一次都没有使用。如何通过一个数据库查询获得输出?

1 个答案:

答案 0 :(得分:1)

您可以在mongo 4.0版本中使用以下聚合。

db.items.aggregate([
  { $addFields: {
     itemCodeStr: {$toString: "$itemCode"}
  }},
  {
    $lookup: {
     from: "orders", 
     localField: "itemCodeStr", 
     foreignField: "itemcode",
     as: "matched-orders"
    }
  },
  {
    $match: {
      matched-orders: []
    }
  }
])