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

MongoDBは、コレクション内のすべてのキーと値を特定のフィールドでグループ化します

    あなたは正しい方向に進んでいます。

    オブジェクト全体を配列に変換するときは、[カテゴリ]フィールドも保存します。

    必要な段階:

    • $ projectを使用してカテゴリを保存し、オブジェクトを配列に変換します
    • $配列をアンワインドして、各フィールドを個別に検討します
    • $ match to remove _idCategory 配列からグループ化したくないその他のフィールド
    • $ group by Category およびk 各キーの値を配列にプッシュするには
    • $ group by Category キーと配列を一緒に収集する
    • $projectは収集された値を持つ配列をオブジェクトに変換します
    • $addFieldsを使用してカテゴリを新しいオブジェクトに挿入します
    • $ replaceRootを使用して、新しいオブジェクトをプロモートします
    db.collection.aggregate([
      {$project: {
          Category: 1,
          fields: {$objectToArray: "$$ROOT"}
      }},
      {$unwind: "$fields"},
      {$match: {"fields.k": {$not: {$in: ["_id","Category"]}} }},
      {$group: {
          _id: {
            Category: "$Category",
            key: "$fields.k"
          },
          value: {$push: "$fields.v"}
      }},
      {$group: {
          _id: "$_id.Category",
          fields: {
            $push: {
              "k": "$_id.key",
              "v": "$value"
            }
          }
      }},
      {$project: {
          fields: {$arrayToObject: "$fields"}
      }},
      {$addFields: {
          "fields.Category": "$_id"
      }},
      {$replaceRoot: { newRoot: "$fields"}}
    ])
    

    遊び場




    1. com.mongodb.client.MongoClientとcom.mongodb.MongoClientの違い

    2. 地理空間クエリは配列で機能しますか? ($ geoWithin、$ geoIntersects)

    3. sslを使用してDockerredisコンテナを設定する方法

    4. ComputeEngineの内部IPでRedisに接続するとGoogleCloud関数がタイムアウトします