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

mongodbは複数の配列を集約します

    まず、フィールドvoteTypeを追加します 各投票で。このフィールドはそのタイプを示します。このフィールドがあるので、投票を2つの別々の配列mlVotersに保持する必要はありません。 およびegVoters;代わりに、これらの配列をドキュメントごとに1つの配列に連結し、後で巻き戻すことができます。

    この時点で、投票ごとに1つのドキュメントがあり、それがどのタイプであるかを示すフィールドがあります。ここで、電子メールでグループ化する必要があります。グループ化の段階で、2つの条件付き合計を実行して、すべての電子メールにある各タイプの投票数をカウントします。

    最後に、フィールドtotalCountを追加します 他の2つのカウントの合計として。

    db.documents.aggregate([
      {
        $addFields: {
          mlVoters: {
            $ifNull: [ "$mlVoters", []]
          },
          egVoters: {
            $ifNull: [ "$egVoters", []]
          }
        }
      },
      {
        $addFields: {
          "mlVoters.voteType": "ml",
          "egVoters.voteType": "eg"
        }
      },
      {
        $project: {
          voters: { $concatArrays: ["$mlVoters", "$egVoters"] }
        }
      },
      {
        $unwind: "$voters"
      },
      {
        $project: {
          email: "$voters.email",
          voteType: "$voters.voteType"
        }
      },
      {
        $group: {
          _id: "$email",
          mlCount: {
            $sum: {
              $cond: {
                "if": { $eq: ["$voteType", "ml"] },
                "then": 1,
                "else": 0
              }
            }
          },
          egCount: {
            $sum: {
              $cond: {
                "if": { $eq: ["$voteType", "eg"] },
                "then": 1,
                "else": 0
              }
            }
          }
        }
      },
      {
        $addFields: {
          totalCount: {
            $sum: ["$mlCount", "$egCount"]
          }
        }
      }
    ])
    



    1. MongoDBに挿入されたドキュメントの_idを取得しますか?

    2. 自分のAWSアカウントでのRedis™のScaleGridホスティング

    3. jedisを使用してredisクラスター内の特定のスロット/ノードに書き込む方法

    4. c#ドライバーを使用してMongoDBに辞書を挿入します