1

我们有 3 个系列来跟踪一家机械车间。
PARTS根据 shopID 给出总物品
我们需要确认物品的总和是否INPROCESS等于REJECT商店的计数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",
},
4

1 回答 1

0

尝试这个:

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"
              }
            ]
          }
        ]
      }
    }
  }
])

Mongo游乐场

于 2020-02-03T20:40:36.500 回答