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

Agregacja Mongo :$grupa i $tablica projektu do zakwestionowania liczby

Dzięki MongoDb 3.4 i nowszym możesz wykorzystać $arrayToObject operatora, aby uzyskać pożądany wynik. Musisz uruchomić następujący zbiorczy potok:

db.collection.aggregate([
    { "$group": {
        "_id": {  
            "date": "$install_date",  
            "platform": { "$toLower": "$platform" }
        },
        "count": { "$sum": 1 }
    } },
    { "$group": {
        "_id": "$_id.date",
        "counts": {
            "$push": {
                "k": "$_id.platform",
                "v": "$count"
            }
        }
    } },
    {  "$addFields": {
        "install_date": "$_id", 
        "platform": { "$arrayToObject": "$counts" }
    }  },
    { "$project": { "counts": 0, "_id": 0 } } 
])

W przypadku starszych wersji skorzystaj z $cond operator w $group krok potoku, aby ocenić zliczenia na podstawie wartości pola platformy, coś takiego:

db.collection.aggregate([    
    { "$group": { 
        "_id": "$install_date",             
        "android_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "android" ] }, 1, 0 ]
            }
        },
        "ios_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "ios" ] }, 1, 0 ]
            }
        },
        "facebook_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "facebook" ] }, 1, 0 ]
            }
        },
        "kindle_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "kindle" ] }, 1, 0 ]
            }
        } 
    } },
    { "$project": {
        "_id": 0, "install_date": "$_id",            
        "platform": {
            "android": "$android_count",
            "ios": "$ios_count",
            "facebook": "$facebook_count",
            "kindle": "$kindle_count"
        }
    } }
])

W powyższym, $cond przyjmuje warunek logiczny jako pierwszy argument (jeśli), a następnie zwraca drugi argument, gdy ocena jest prawdziwa (wtedy), lub trzeci argument, gdy fałsz (inaczej). To powoduje, że prawda/fałsz zwraca wartości 1 i 0, aby przekazać do $sum odpowiednio.

Na przykład, jeśli { "$eq": [ "$platform", "facebook" ] }, jest prawdziwe, to wyrażenie zostanie ocenione jako { $sum: 1 } inaczej będzie to { $sum: 0 }




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przewodnik po zapytaniach w Spring Data MongoDB

  2. MongoDB - jak zapytać o zagnieżdżony element w kolekcji?

  3. MongoDB — ustawianie instrukcji warunkowej w .find()

  4. Jak wysłać zapytanie do MongoDB za pomocą like

  5. Wiosenna sesja z MongoDB