MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да групирате по множество колони и множество стойности в mongodb

В рамките на тръбопровода за агрегиране, за MongoDB версия 3.6 и по-нова, можете да използвате използването на $arrayToObject оператор и $replaceRoot тръбопровод, за да получите желания JSON изход. Това работи добре за неизвестни стойности на полето за повикване.

Ще трябва да изпълните следния агрегатен канал:

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

За по-ранни версии на MongoDB, които нямат поддръжка за горните оператори, се възползвайте от $cond оператор в $group етап за оценка на броя въз основа на известното извикване стойности, нещо като следното:

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. импортиране на CSV файл MongoDB с ISODate

  2. Разлика между cursor.count() и cursor.size() в MongoDB

  3. Spring Data MongoDB и групова актуализация

  4. Как да използвате функцията за агрегиране mongo db-query

  5. Анотацията на MockBean в теста за зареждане на Spring причинява NoUniqueBeanDefinitionException