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

Używanie $count w ramach operacji addField w agregacji MongoDB

Całkowita liczba zawsze będzie wynikiem jednego dokumentu, więc potrzebujesz $aspekt do uruchamiania wielu potoków agregacji, a następnie scalania wyników. Załóżmy, że Twój zwykły potok zawiera prosty $project i chcesz scalić jego wyniki z $count . Możesz uruchomić poniżej agregację:

db.col.aggregate([
    {
        $facet: {
            totalCount: [
                { $count: "value" }
            ],
            pipelineResults: [
                {
                    $project: { _id: 1 } // your regular aggregation pipeline here 
                }
            ]
        }
    },
    {
        $unwind: "$pipelineResults"
    },
    {
        $unwind: "$totalCount"
    },
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: [ "$pipelineResults", { totalCount: "$totalCount.value" } ]
            }
        }
    }
])

Po $facet etap otrzymasz pojedynczy dokument taki jak ten

{
    "totalCount" : [
        {
            "value" : 3
        }
    ],
    "pipelineResults" : [
        {
            "_id" : ObjectId("5b313241120e4bc08ce87e46")
        },
        //....
    ]
}

Następnie musisz użyć $unwind do przekształcania tablic w wiele dokumentów i $replaceRoot z $mergeObjects aby promować regularne wyniki potoku do poziomu głównego.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoParseError:URI nie ma nazwy hosta, nazwy domeny i tld

  2. dlaczego DuplicateKeyError:E11000 zduplikowany indeks błędu klucza:test.test.$notification_1 dup key:{ :null }

  3. Flask wolno odpytuje Mongdb

  4. Mongodb aktualizuje ograniczoną liczbę dokumentów

  5. Spring MongoDB proces/wyciek wątku