sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB tæller dokumenter for hvert array-elementer

Du kan $unwind dit array for at få et enkelt dokument pr. element og derefter køre $group at tælle elementer:

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

EDIT:du kan bruge en ekstra gruppe med $replaceRoot og $arrayToObject for at returnere dine id'er som nøgler og tæller som værdier:

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. Hvordan beskytter man adgangskodefeltet i Mongoose/MongoDB, så det ikke vender tilbage i en forespørgsel, når jeg udfylder samlinger?

  2. Forespørgsler i MongoDB

  3. $filter inde i $project MongoDB ved hjælp af Spring Data

  4. Kører mongoskin kun med mongodb version 1.4 og ældre?