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

Mongo Group và tính tổng với hai trường

Vì bạn cần tính toán số lượng email được trao đổi giữa 2 địa chỉ, sẽ là công bằng nếu chiếu một between trường như sau:

db.a.aggregate([
    { $match: {
        to: { $exists: true },
        from: { $exists: true },
        email: { $exists: true }
    }}, 
    { $project: {
        between: { $cond: { 
            if: { $lte: [ { $strcasecmp: [ "$to", "$from" ] }, 0 ] }, 
            then: [ { $toLower: "$to" }, { $toLower: "$from" } ], 
            else: [ { $toLower: "$from" }, { $toLower: "$to" } ] }
        } 
    }},
    { $group: {
         "_id": "$between",
         "count": { $sum: 1 } 
    }},
    { $sort :{ count: -1 } }
])

Logic hợp nhất nên khá rõ ràng từ ví dụ:nó là một mảng được sắp xếp theo thứ tự bảng chữ cái của cả hai email. $match$toLower các phần là tùy chọn nếu bạn tin tưởng vào dữ liệu của mình.

Tài liệu cho các toán tử được sử dụng trong ví dụ:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 2 tài liệu hợp nhất trong MongoDB

  2. Có thư viện giống orm nào cho mongodb trong scala không?

  3. Node.js sử dụng lại tham chiếu MongoDB

  4. MongoDB đánh giá nhiều $ hoặc nhiều câu lệnh như thế nào?

  5. Thông báo lỗi từ thao tác MongoDB `disneys.insertOne ()` đệm hết thời gian chờ sau 10000ms