MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak grupować według wielu kolumn i wielu wartości w mongodb

W ramach potoku agregacji, w przypadku MongoDB w wersji 3.6 i nowszych, można wykorzystać $arrayToObject operator i $replaceRoot potok, aby uzyskać żądane dane wyjściowe JSON. Działa to dobrze w przypadku nieznanych wartości pola połączenia.

Musisz uruchomić następujący zbiorczy potok:

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

W przypadku wcześniejszych wersji MongoDB, które nie obsługują powyższych operatorów, skorzystaj z $cond operator w $group etap do oceny zliczeń na podstawie znanego rozmowy wartości, mniej więcej tak:

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. Nie można użyć zapytania eksportu Mongo

  2. MongoDB cursor.count()

  3. Sortuj zagnieżdżoną tablicę obiektów

  4. Dlaczego po aktualizacji PHP do wersji 7 nie mogę używać sterownika mongodb?

  5. MongoDB — struktura agregacji (łączna liczba)