sql >> Database teknologi >  >> NoSQL >> MongoDB

Brug af $count i en addField-operation i MongoDB Aggregation

Det samlede antal vil altid være et resultat af ét dokument, så du har brug for $facet at køre flere aggregeringspipelines og derefter flette resultater. Lad os sige, at din almindelige pipeline indeholder simple $project og du vil flette dets resultater med $count . Du kan køre under aggregering:

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

Efter $facet fase vil du få et enkelt dokument som dette

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

Så skal du bruge $unwind at transformere arrays til flere dokumenter og $replaceRoot med $mergeObjects for at fremme regelmæssige pipeline-resultater til rodniveau.




  1. Flere node-mongodb-native forbindelser

  2. mongoDB vælger post baseret på to betingelser

  3. Hvordan bruger man redis til at gemme hierarkiske data?

  4. Hvad er forskellen mellem størrelse og storageSize vist af Mongo stats() funktion