MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Използване на $count в рамките на операция addField в MongoDB Aggregation

Общият брой винаги ще бъде резултат от един документ, така че имате нужда от $facet за да стартирате множество конвейери за агрегиране и след това да обедините резултатите. Да приемем, че вашият обикновен тръбопровод съдържа прост $project и искате да обедините неговите резултати с $count . Можете да стартирате по-долу агрегацията:

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

След $facet етап ще получите един документ като този

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

След това трябва да използвате $unwind за трансформиране на масиви в множество документи и $replaceRoot с $mergeObjects за популяризиране на редовни резултати от конвейера на основно ниво.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. обединете множество документи в един документ с двете полета на документа в MongoDB

  2. Премахване на дубликат в MongoDB

  3. Конвертиране на DBObject в Java Object при извличане на стойности от MongoDB

  4. Автоматично увеличение в MongoDB за съхраняване на последователност от уникален потребителски идентификатор

  5. Архитектура на приложения, базирана на Mongoose