MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB zählt Dokumente für jedes Array-Element

Sie können $unwind Ihr Array, um ein einzelnes Dokument pro Element zu erhalten, und führen Sie dann $group aus Elemente zählen:

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

BEARBEITEN:Sie können eine zusätzliche Gruppe mit $replaceRoot und $arrayToObject So geben Sie Ihre IDs als Schlüssel zurück und zählen als Werte:

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