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

Tổng hợp MongoDB với tổng giá trị mảng

Để đạt được nhu cầu của bạn với khung tổng hợp, giai đoạn đầu tiên sẽ là $match thao tác trên hành khách được đề cập khớp với tài liệu với người dùng trong mảng hành khách, tiếp theo là $unwind hoạt động giải cấu trúc mảng hành khách từ các tài liệu đầu vào trong hoạt động trước đó để xuất ra một tài liệu cho mỗi phần tử. Một $match khác hoạt động trên mảng đã giải cấu trúc sẽ tiếp tục lọc dòng tài liệu trước đó để chỉ cho phép các tài liệu phù hợp chuyển chưa được sửa đổi vào giai đoạn đường ống tiếp theo, đang chiếu các trường bắt buộc với $project nhà điều hành. Về cơ bản, quy trình tổng hợp của bạn cho user3 sẽ như thế nào:

db.collection.aggregate([
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$unwind": "$passengers"
     },
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$project": {
             "_id": 0,
            "driver": "$driver",
            "times": "$passengers.times"
        }
     }
])

Kết quả :

/* 0 */
{
    "result" : [ 
        {
            "driver" : "user1",
            "times" : 3
        }, 
        {
            "driver" : "user2",
            "times" : 2
        }
    ],
    "ok" : 1
}

CẬP NHẬT :

Để nhóm các bản sao trên các trình điều khiển có các ngày khác nhau, như bạn đã đề cập, bạn có thể thực hiện $group hoạt động ngay trước $project cuối cùng giai đoạn đường ống trong đó bạn tính tổng số lần hành khách bằng cách sử dụng $sum nhà điều hành:

db.collection.aggregate([
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$unwind": "$passengers"
     },
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$group": {
             "_id": "$driver", 
             "total": {
                 "$sum": "$passengers.times"
             }
         }
     },
     {
         "$project": {
            "_id": 0,
            "driver": "$_id",
            "total": 1
        }
     }
])

Kết quả :

/* 0 */
{
    "result" : [ 
        {
            "total" : 2,
            "driver" : "user2"
        }, 
        {
            "total" : 3,
            "driver" : "user1"
        }
    ],
    "ok" : 1
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trong MongoDB mapreduce, làm cách nào để làm phẳng đối tượng giá trị?

  2. MongoDB $ dateToParts

  3. Kết nối với máy chủ mongodb từ bộ chứa docker

  4. Các truy vấn tổng hợp trung bình trong Meteor

  5. Mọi thứ bạn cần biết về ứng dụng khách MongoDB