sql >> Databasteknik >  >> NoSQL >> MongoDB

Använda $count inom en addField-operation i MongoDB Aggregation

Det totala antalet kommer alltid att vara ett enda dokument så du behöver $facet för att köra flera aggregeringspipelines och sedan slå samman resultat. Låt oss säga att din vanliga pipeline innehåller enkla $project och du vill slå samman dess resultat med $count . Du kan köra nedanstående 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 steg kommer du att få ett sådant här dokument

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

Då måste du använda $unwind för att omvandla arrayer till flera dokument och $replaceRoot med $mergeObjects för att främja regelbundna pipeline-resultat till rotnivå.




  1. Autoslutförande filtrerad med mongodb

  2. Överför stora MongoDB-samlingar till data.frame i R med rmongodb och plyr

  3. Mongo Distinkt Aggegation

  4. Bästa sättet att lagra bilder i MERN stack webbapplikation