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

MongoDB počítá dokumenty pro každý prvek pole

Můžete $unwind vaše pole, abyste získali jeden dokument na prvek, a poté spusťte $group pro počítání prvků:

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

EDIT:můžete použít další skupinu s $replaceRoot a $arrayToObject chcete-li vrátit vaše ID jako klíče a počty jako hodnoty:

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

Hřiště Mongo




  1. Jaká jsou pravidla pluralizace Mongoose (Nodejs)?

  2. Morphia List<Map<String,Object>>> return Embedded element není DBObject při operaci hledání

  3. Kombinace dvou $exists en MongoDB .find

  4. Připojení k MongoDB ReplicaSet na Kubernetes