私はこの2つのコレクション、つまりInwardとOutwardを持っています。どちらのコレクションにも、製品、バッチ、および数量のフィールドを含む同様の埋め込みサブドキュメントがあります。

Kbalsamy

内向きのコレクション

{"ord" : 1,
    "products" : [
            {
                    "name" : "apple",
                    "qty" : "10",
                    "batch" : "jun-2021"
            },
            {
                    "name" : "banana",
                    "qty" : 20,
                    "batch" : "jan-2021"
            }
    ]

}

外向きのコレクション

{
    "_id" : ObjectId("5edde5487957d9efea972a74"),
    "inv" : 1,
    "products" : [
            {
                    "name" : "apple",
                    "qty" : 13,
                    "batch" : "jun-2021"
            }
    ]

}

ここで、特定の製品とバッチ(グループ化)の両方のコレクションの実際の在庫数量チェックを実行したいと思います。

バリジョン

あなたはこの方法を試すことができます:

  1. inward.ord = outward.inv条件付きで参加します。
  2. productsフィールドを平らにします。
  3. 製品のことで、グループnamebatch合計のqty値。

db.inward.aggregate([
  {
    $lookup: {
      from: "outward",
      let: {
        ord: "$ord",
        products: "$products"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [ "$$ord", "$inv" ]
            }
          }
        },
        {
          $project: {
            products: {
              $concatArrays: [
                "$$products",
                "$products"
              ]
            }
          }
        },
        {
          $unwind: "$products"
        },
        {
          $replaceWith: "$products"
        }
      ],
      as: "products"
    }
  },
  {
    $unwind: "$products"
  },
  {
    $group: {
      _id: {
        batch: "$products.batch",
        name: "$products.name"
      },
      qty: {
        $sum: "$products.qty"
      }
    }
  }
])

MongoPlayground

注: MongoDBが必要ですv4.2

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ