MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

mongodb tổng hợp nhiều mảng

Đầu tiên, bạn thêm một trường voteType trong mỗi phiếu bầu. Trường này cho biết loại của nó. Có trường này, bạn không cần phải giữ các phiếu bầu trong hai mảng riêng biệt mlVotersegVoters; thay vào đó, bạn có thể nối các mảng đó thành một mảng duy nhất trên mỗi tài liệu và thư giãn sau đó.

Tại thời điểm này, bạn có một tài liệu cho mỗi phiếu bầu, với một trường cho biết nó thuộc loại nào. Bây giờ bạn chỉ cần nhóm theo email và trong giai đoạn nhóm, thực hiện hai phép tính tổng có điều kiện để đếm xem có bao nhiêu phiếu bầu của mỗi loại cho mỗi email.

Cuối cùng, bạn thêm một trường totalCount là tổng của hai số còn lại.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để tìm vào mongodb đến mục cuối cùng của một mảng?

  2. Làm phẳng giản đồ mongoDB

  3. Trình điều khiển C # cho MongoDb:làm thế nào để sử dụng giới hạn + số lượng?

  4. MongoDB $ trong Nhà điều hành đường ống tổng hợp

  5. TypeError:db.collection không phải là một hàm