sql >> データベース >  >> NoSQL >> MongoDB

サブドキュメントフィールドとmongodbの合計金額をカウントします

    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に対して何であるかは、一般的なクエリです。 「グループ化」だけでなく、他の操作にも使用できます。

    すべての集計演算子 のドキュメントをお読みください また、SQLから集約へのマッピング もご覧ください。 そもそもSQLにある程度精通している場合は、一般的なガイドとしてドキュメントに記載されています。概念を説明し、実行できるいくつかのことを示します。




    1. すべてのマングースイベントとは何ですか?それらはどこに記録されていますか?

    2. コンソールでMongoDBログメッセージを無効にするにはどうすればよいですか?

    3. mongodbドキュメントのすべての配列要素を特定の値に変更するにはどうすればよいですか?

    4. 1回の呼び出しでオブジェクトの配列をマングースの配列にプッシュする方法は?