sql >> Database >  >> NoSQL >> MongoDB

MongoDB telt documenten voor elk array-element

U kunt $unwind uw array om één document per element te krijgen en voer vervolgens $group uit om elementen te tellen:

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

EDIT:je kunt een extra groep gebruiken met $replaceRoot en $arrayToObject om uw ID's terug te geven als sleutels en telt als waarden:

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-speeltuin




  1. Mongodb sorteer binnenarray

  2. MongoDB:problemen met het gebruik van $concat om de waarde van een veld bij te werken

  3. MongoDB installeren en configureren op Ubuntu

  4. docker mongo voor enkele (alleen primaire node) replicaset (voor ontwikkeling)?