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

Cách nhóm theo nhiều cột và nhiều giá trị trong mongodb

Trong quy trình tổng hợp, đối với MongoDB phiên bản 3.6 và mới hơn, bạn có thể tận dụng việc sử dụng $arrayToObject toán tử và $replaceRoot để có được đầu ra JSON mong muốn. Điều này hoạt động tốt đối với các giá trị không xác định của trường cuộc gọi.

Bạn sẽ cần chạy đường dẫn tổng hợp sau:

db.collection.aggregate([
    { "$group": {
        "_id": { 
            "name": "$name",
            "call": "$call"
        },
        "count": { "$sum": 1 }
    } },
    { "$group": {
        "_id": "$_id.name",
        "counts": {
            "$push": {
                "k": "$_id.call",
                "v": "$count"
            }
        },
        "nameCount": { "$sum": 1 }
    } },
    { "$replaceRoot": { 
        "newRoot": { 
            "$mergeObjects": [ 
                { "$arrayToObject": "$counts" }, 
                "$$ROOT" 
             ] 
        } 
    } },
    { "$project": { "counts": 0 } }
])

Đối với các phiên bản MongoDB cũ hơn không hỗ trợ các toán tử ở trên, hãy tận dụng $cond toán tử trong $group giai đoạn để đánh giá số lượng dựa trên call đã biết giá trị, giống như sau:

db.collection.aggregate([
    { "$group": {
        "_id": "$name",
        "nameCount": { "$sum": 1 },
        "Success Call": {
            "$sum": {
                "$cond": [ { "$eq": [ "$call",  "Success Call" ] }, 1, 0]
            }
        },
        "Repeat Call": {
            "$sum": {
                "$cond": [ { "$eq": [ "$call",  "Repeat Call" ] }, 1, 0]
            }
        },
        "Unsuccess Call": {
            "$sum": {
                "$cond": [ { "$eq": [ "$call",  "Unsuccess Call" ] }, 1, 0]
            }
        }
    } },
    { "$project": {
        "_id": 0, 
        "name": "$_id",
        "nameCount": 1,
        "Success Call":1,
        "Unsuccess Call":1,
        "Repeat Call":1               
    } }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trình điều khiển mongo c:Làm thế nào để truy vấn tài liệu với _id trong danh sách?

  2. Làm thế nào để sử dụng dữ liệu được kết xuất bởi mongodump?

  3. Mongoose:Tài liệu nhúng đệ quy trong Coffeescript

  4. MongoDB không tạo cơ sở dữ liệu trong shell

  5. lưu mật khẩu dưới dạng muối băm trong mongodb trong bộ sưu tập người dùng bằng python / bcrypt