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

Cara mengelompokkan berdasarkan beberapa kolom dan beberapa nilai di mongodb

Dalam alur agregasi, untuk MongoDB versi 3.6 dan yang lebih baru, Anda dapat memanfaatkan penggunaan $arrayToObject operator dan $replaceRoot pipa untuk mendapatkan output JSON yang diinginkan. Ini berfungsi dengan baik untuk nilai bidang panggilan yang tidak diketahui.

Anda perlu menjalankan pipa agregat berikut:

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

Untuk versi MongoDB sebelumnya yang tidak memiliki dukungan untuk operator di atas, manfaatkan $cond operator di $group tahap untuk mengevaluasi jumlah berdasarkan call yang diketahui nilai, seperti berikut:

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. Bagaimana cara menjalankan sejumlah kriteria dinamis di luwak.find?

  2. Gambaran Umum Operator Percona MongoDB Kubernetes

  3. Ketidakcocokan waktu di mongo shell

  4. 7 Cara Menghitung Dokumen di MongoDB

  5. Kapan menggunakan Singleton vs Transient vs Request menggunakan Ninject dan MongoDB