MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Agregasi MongoDB dengan jumlah nilai array

Untuk memenuhi kebutuhan Anda dengan kerangka kerja agregasi, tahap pipeline pertama adalah $match operasi pada penumpang yang bersangkutan yang cocok dengan dokumen dengan pengguna di jajaran penumpang, diikuti dengan $unwind operasi yang mendekonstruksi susunan penumpang dari dokumen input di operasi sebelumnya untuk mengeluarkan dokumen untuk setiap elemen. $match lainnya operasi pada larik yang didekonstruksi mengikuti yang selanjutnya memfilter aliran dokumen sebelumnya untuk memungkinkan hanya dokumen yang cocok yang lolos tanpa dimodifikasi ke tahap saluran pipa berikutnya, yang memproyeksikan bidang yang diperlukan dengan $project operator. Jadi pada dasarnya pipa agregasi Anda untuk user3 akan menjadi seperti:

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

Hasil :

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

PERBARUI :

Untuk mengelompokkan duplikat pada driver dengan tanggal berbeda, seperti yang Anda sebutkan, Anda dapat melakukan $group operasi tepat sebelum $project terakhir tahap pipeline tempat Anda menghitung total waktu penumpang menggunakan $sum operator:

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
        }
     }
])

Hasil :

/* 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. Bagaimana cara menggunakan variabel sebagai nama bidang di mongodb-native findOne()?

  2. MongoDB $isoWeek

  3. Performa MongoDB dengan struktur data yang berkembang

  4. membuat formulir pendaftaran dan login di node.js dan mongodb

  5. Integrasi &Layanan Tersedia dari MongoDB untuk Cloud