sql >> Databáze >  >> NoSQL >> MongoDB

Použití $count v rámci operace addField v agregaci MongoDB

Celkový počet bude vždy výsledkem jednoho dokumentu, takže potřebujete $facet spustit více agregačních kanálů a poté sloučit výsledky. Řekněme, že váš běžný kanál obsahuje jednoduchý $project a chcete sloučit jeho výsledky s $count . Můžete spustit pod agregací:

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 fázi získáte jeden dokument, jako je tento

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

Pak musíte použít $unwind transformovat pole do více dokumentů a $replaceRoot s $mergeObjects k podpoře pravidelných výsledků kanálu do kořenové úrovně.




  1. Chyba nasazení MeteorJS MongoDB

  2. Django-nonrel vs Django-mongodb vs Mongokit vs pymongo native

  3. Rozdělit řetězec podle znaku v Lua

  4. MongoDB na AWS:Jak vybrat správný typ instance EC2 pro váš server MongoDB?