フィールド名に基づいて配列要素を収集するMongo集約

ボート

私は以下のような集約されたmongoドキュメントを持っています。2つの異なるバッチ(「-マイナー」と「-メジャー」)があり、各バッチにも「batchElements」があります。

{
    "_id" : "123",
    "info" : {
        "batch" : "Batch1-Minor"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch2-Minor"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch3-Major"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch4-Major"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
}

-Minor」と「 -Major」のすべての「batchElements」を収集して、以下のようにドキュメントを作成するにはどうすればよいですか

出力:

  {
    "_id" : "123",
    "minorElements" : [
        [{}, {}, {}, ..... {} ], // elements of "Batch1-Minor"
        [{}, {}, {}, ..... {} ], // elements of "Batch2-Minor"
        ...                      // elements of "BatchN-Minor"
    ],
    "majorElements" : [
        [{}, {}, {}, ..... {} ], // elements of "Batch3-Major"
        [{}, {}, {}, ..... {} ], // elements of "Batch4-Major"
        ...                      // elements of "BatchN-Major"
    ]
}
mickl

$ splitから始めて$ groupの 一部としてバッチの「タイプ」を取得できます_idそして、あなたは別のものを実行することができ$group作ることminormajor同じ文書の部分。最後のステップでは、必要な$ replaceRootと一緒に$ arrayToObjectをルートレベルに両方のアレイを促進します。

db.collection.aggregate([
    {
        $group: {
            _id: {
                id: "$_id",
                type: { $arrayElemAt: [ { $split: [ { $toLower: "$info.batch" }, "-" ] }, 1 ] }
            },
            docs: { $push: "$batchElements.elements" }
        }
    },
    {
        $group: {
            _id: "$_id.id",
            data: { $push: { k: { $concat: ["$_id.type","Elements"] }, v: "$docs" } }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: [ { _id: "$_id" }, { $arrayToObject: "$data" } ]
            }
        }
    }
])

モンゴ遊び場

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

セパレータに基づいて列を収集する

分類Dev

Mongo集計:配列フィールドの一致条件に基づいてドキュメントをカウントします

分類Dev

非配列フィールドに基づいてmongoドキュメントに配列値を投影する

分類Dev

MongoDB 3.2:配列要素から集約パイプラインに新しいフィールドを作成する

分類Dev

Javaの複数のフィールドに基づいてIDのリストを収集します

分類Dev

配列要素の日時とフィールドに基づいてドキュメントを集計および並べ替えます

分類Dev

C#Linqの配列に基づいて収集するオブジェクトをフィルタリングまたはクエリする方法

分類Dev

SQLの配列の要素に基づいてグループごとにデータを集約する洗練された方法はありますか?

分類Dev

Mongo DB-配列内の要素の存在に基づいて動的フィールドを作成するにはどうすればよいですか?

分類Dev

PDFに存在するフィールド名に基づいて配列を作成できますか?

分類Dev

Presto / Hiveの列値に基づいて列を集約する

分類Dev

フィールドの値を配列に集約する方法は?

分類Dev

フィールドとしての一意の要素に基づいて集計を作成するにはどうすればよいですか?

分類Dev

以前のオブジェクトの値に基づいて、オブジェクトの順序付けられた配列の特定の要素をフィルタリングします(集約フレームワーク)

分類Dev

カンマに基づいて列を集約する

分類Dev

Postgres SQL配列は、条件に基づいて単一のテーブルから値を集約します

分類Dev

配列パラメータに基づいて配列を集約

分類Dev

基準に基づいてフィルタリングされたオブジェクトのすべてのプロパティ名を収集します

分類Dev

親フィールドの階層に基づいて配列を整理する

分類Dev

文字列である最初の列に基づいてRのデータフレームを集約します

分類Dev

特定の変化する列条件に基づいてPythonデータフレーム行を集約する

分類Dev

特定の変化する列条件に基づいてPythonデータフレーム行を集約する

分類Dev

フィールドと配列Mongoの一致に基づいて条件付きでフィールドを追加する方法

分類Dev

Javaストリームは、列の合計に基づいてリストフィルタリングにExcelCSVを収集します

分類Dev

列がテーブルリストに基づいている集約SQLレポートを作成します

分類Dev

列の値に基づいてテーブルの行をグループ化/集約する方法

分類Dev

列の制約に基づいてパンダデータフレームの集計を処理する

分類Dev

Rの複数の列に基づいてデータフレームを集約する方法は?

分類Dev

idとid_typeに基づいて配列に集約するBigquery

Related 関連記事

  1. 1

    セパレータに基づいて列を収集する

  2. 2

    Mongo集計:配列フィールドの一致条件に基づいてドキュメントをカウントします

  3. 3

    非配列フィールドに基づいてmongoドキュメントに配列値を投影する

  4. 4

    MongoDB 3.2:配列要素から集約パイプラインに新しいフィールドを作成する

  5. 5

    Javaの複数のフィールドに基づいてIDのリストを収集します

  6. 6

    配列要素の日時とフィールドに基づいてドキュメントを集計および並べ替えます

  7. 7

    C#Linqの配列に基づいて収集するオブジェクトをフィルタリングまたはクエリする方法

  8. 8

    SQLの配列の要素に基づいてグループごとにデータを集約する洗練された方法はありますか?

  9. 9

    Mongo DB-配列内の要素の存在に基づいて動的フィールドを作成するにはどうすればよいですか?

  10. 10

    PDFに存在するフィールド名に基づいて配列を作成できますか?

  11. 11

    Presto / Hiveの列値に基づいて列を集約する

  12. 12

    フィールドの値を配列に集約する方法は?

  13. 13

    フィールドとしての一意の要素に基づいて集計を作成するにはどうすればよいですか?

  14. 14

    以前のオブジェクトの値に基づいて、オブジェクトの順序付けられた配列の特定の要素をフィルタリングします(集約フレームワーク)

  15. 15

    カンマに基づいて列を集約する

  16. 16

    Postgres SQL配列は、条件に基づいて単一のテーブルから値を集約します

  17. 17

    配列パラメータに基づいて配列を集約

  18. 18

    基準に基づいてフィルタリングされたオブジェクトのすべてのプロパティ名を収集します

  19. 19

    親フィールドの階層に基づいて配列を整理する

  20. 20

    文字列である最初の列に基づいてRのデータフレームを集約します

  21. 21

    特定の変化する列条件に基づいてPythonデータフレーム行を集約する

  22. 22

    特定の変化する列条件に基づいてPythonデータフレーム行を集約する

  23. 23

    フィールドと配列Mongoの一致に基づいて条件付きでフィールドを追加する方法

  24. 24

    Javaストリームは、列の合計に基づいてリストフィルタリングにExcelCSVを収集します

  25. 25

    列がテーブルリストに基づいている集約SQLレポートを作成します

  26. 26

    列の値に基づいてテーブルの行をグループ化/集約する方法

  27. 27

    列の制約に基づいてパンダデータフレームの集計を処理する

  28. 28

    Rの複数の列に基づいてデータフレームを集約する方法は?

  29. 29

    idとid_typeに基づいて配列に集約するBigquery

ホットタグ

アーカイブ