sql >> Database >  >> NoSQL >> MongoDB

$count gebruiken binnen een addField-bewerking in MongoDB Aggregation

Het totale aantal is altijd een resultaat van één document, dus u hebt nodig $facet om meerdere aggregatiepijplijnen uit te voeren en vervolgens de resultaten samen te voegen. Laten we zeggen dat uw reguliere pijplijn eenvoudig $project . bevat en je wilt de resultaten samenvoegen met $count . U kunt onderstaande aggregatie uitvoeren:

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

Na $facet fase krijg je een enkel document zoals dit

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

Dan moet je $unwind gebruiken om arrays om te zetten in meerdere documenten en $replaceRoot met $mergeObjects om reguliere pijplijnresultaten naar rootniveau te promoten.




  1. Redis - Lua-tabellen als retourwaarden - waarom werkt dit niet?

  2. Hoe string naar objectId in LocalField te converteren voor $lookup Mongodb

  3. MongoDB - eclips

  4. Mongodb:Vind documenten met array waar ten minste één element niet overeenkomt met ObjectID