MongoDB 集約パイプライン
あなたの問題を解決するために利用可能です。 を使用して、処理している配列から詳細を取得します。 $ unwind
次に、 $ group
を使用します
合計を「合計」するには:
db.collection.aggregate([
// Unwind the array to de-normalize as documents
{ "$unwind": "$details" },
// Group on the key you want and provide other values
{ "$group": {
"_id": "$details.itemcode",
"itemname": { "$first": "$details.itemname" },
"totalprice": { "$sum": "$details.price" },
"totalqty": { "$sum": "$details.qty" }
}}
])
理想的には、 $ match
が必要です。
そこにステージングして、関係のないデータを最初に除外します。これは基本的にMongoDBクエリであり、すべて同じ引数と演算子を取ります。
ここのほとんどは本当に単純です。 $ unwind
はSQLの「JOIN」のようなものですが、埋め込み構造では「結合」がすでに行われているため、「1対多」のテーブル関係間で結合が行われるように「非正規化」されますが、ドキュメント自体。基本的に、「親」ドキュメントパーツを新しいドキュメントとして各配列メンバーの配列に「繰り返し」ます。
次に、 $ group
「GROUPBY」のように、キーの動作。「キー」は _id
です。 価値。そこにあるものはすべて「個別」であり、他のすべての値は「グループ化演算子」によって収集されます。
これは、 $ first
>
マニュアルページで説明されているように、これは前述の「キー」で説明した「グループ化境界」から「最初の」値を取得します。このフィールドのすべての値が同じである可能性が高いため、これが必要です。したがって、これは「最初の」一致を選択するための論理的な選択です。
最後に、 $ sum
があります。
期待されることを行うグループ化演算子。 「キー」の下に指定されたすべての値は、合計を提供するために「加算」または「合計」されます。 SQL SUM()
と同じように 。
また、すべての $
接頭辞付きの名前集約フレームワークが、処理中の現在のドキュメント内の「フィールド/プロパティ」名の変数を処理する方法があります。 「ドット表記」
親プロパティ名内にネストされた埋め込み「フィールド/プロパティ」を参照するために使用されます。
MongoDBで集計を学ぶと便利です。基本的な「SELECT」ステートメント以外のものがSQLに対して何であるかは、一般的なクエリです。 「グループ化」だけでなく、他の操作にも使用できます。
すべての