【问题标题】:In MongoDB how to use $lookup to get not matched records only?在 MongoDB 中,如何使用 $lookup 仅获取不匹配的记录?
【发布时间】:2019-06-19 02:36:36
【问题描述】:

在MongoDB中,我想获取那些没有订单的产品的数据。

集合:ma​​ster_product_details、master_order_details

我正在使用普通的 $lookup 查询,它给出所有匹配或不匹配的记录。

db.master_product_details.aggregate([
        { 
        $match: { seller_user_id : 'seller_id' } 
        },
        {
        $lookup : {from: "master_order_details",localField: "seller_sku_id", foreignField: "sku_id", as : "Orders"} 
        },
        {$unwind : '$Orders'},
        {$project : { seller_sku_id : 1, product_title : 1, _id : 0}

            }
        ])

还有其他方法可以得到结果吗?

【问题讨论】:

  • 在末尾再使用一个$match 条件。 { $match: { Orders: [] }}
  • 是的,谢谢@AnthonyWinzlet,我只是将 {$unwind : '$Orders'} 替换为 { $match: { Orders: [] }} 并得到了我想要的结果。

标签: database mongodb aggregate-functions


【解决方案1】:

在管道末尾再使用一个$match 条件

db.master_product_details.aggregate([
  { "$match": { "seller_user_id": "seller_id" }},
  { "$lookup": {
    "from": "master_order_details",
    "localField": "seller_sku_id",
    "foreignField": "sku_id",
    "as": "Orders"
  }},
  { "$match": { "Orders": [] }}
])

【讨论】:

  • 如果您只需要匹配记录(正如我们的要求一样),第二个匹配条件将是:{“$match”:{“Orders”:{$exists:true,$ ne: [] } } } 礼貌:stackoverflow.com/questions/14789684/…
猜你喜欢
  • 2019-02-05
  • 2017-08-30
  • 2018-11-17
  • 2023-04-04
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多