【问题标题】:Conditional aggregation stage条件聚合阶段
【发布时间】:2020-02-03 09:01:17
【问题描述】:

我们有 3 个集合来跟踪一家机械车间。
PARTS 根据 shopID 提供总物品
我们需要确认INPROCESSREJECT 中的商品总和是否等于店铺PARTS 中的数量。

但是,我们将查看 REJECT - 仅当 INPROCESS 不等于 count 时,从而节省查找。

如何做到这一点。

PARTS

{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "count": 200,
}


INPROCESS

{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "itemID": "5647",
},
{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "itemID": "2314",
},


REJECTED

{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "itemID": "xxxx",
},
{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "itemID": "yyyy",
},

【问题讨论】:

    标签: aggregation-framework mongodb4.0


    【解决方案1】:

    试试这个:

    db.PARTS.aggregate([
      {
        $lookup: {
          from: "INPROCESS",
          localField: "shop",
          foreignField: "shop",
          as: "inprocess"
        }
      },
      {
        $match: {
          $expr: {
            $ne: [
              "$count",
              {
                $size: "$inprocess"
              }
            ]
          }
        }
      },
      {
        $lookup: {
          from: "REJECTED",
          localField: "shop",
          foreignField: "shop",
          as: "rejected"
        }
      },
      {
        $match: {
          $expr: {
            $ne: [
              "$count",
              {
                $add: [
                  {
                    $size: "$inprocess"
                  },
                  {
                    $size: "$rejected"
                  }
                ]
              }
            ]
          }
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2018-07-21
      • 2020-05-05
      • 2020-12-28
      相关资源
      最近更新 更多