sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB räknar dokument för varje arrayelement

Du kan $unwind din array för att få ett enda dokument per element och sedan köra $group att räkna element:

db.collection.aggregate([
    {
        $unwind: "$elements"
    },
    {
        $group: {
            _id: "$elements",
            count: { $sum: 1 }
        }
    }
])

EDIT:du kan använda ytterligare grupp med $replaceRoot och $arrayToObject för att returnera dina ID som nycklar och räknas som värden:

db.collection.aggregate([
    {
        $unwind: "$elements"
    },
    {
        $group: {
            _id: "$elements",
            count: { $sum: 1 }
        }
    },
    {
        $group: {
            _id: null,
            counts: { $push: { k: "$_id", v: "$count" } }
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$counts" }
        }
    }
])

Mongo Playground




  1. Infogar data till MongoDB - inget fel, ingen infogning

  2. Förhindrar databasrelaterade tävlingsförhållanden i Node.js

  3. Node redis utgivare förbrukar för mycket minne

  4. Hur mycket snabbare är Redis än mongoDB?