sql >> Database >  >> NoSQL >> MongoDB

Hoe tel ik meerdere sleutels in dezelfde MongoDB-aggregatie $ group-query?

Er zijn een paar verschillende benaderingen die u hier kunt gebruiken:

  1. Gebruik kaart/verklein:doe dit niet. Op dit moment zou het veel sneller zijn om het aggregatieraamwerk drie keer uit te voeren dan om een ​​kaartverkleiningsfunctie te gebruiken voor dit gebruik.

  2. Voer de aggregatie 3 keer uit. Dit is niet optimaal, maar als je geen tijdsdruk hebt, is dit de gemakkelijkste optie. Als uw aggregaties toch

  3. Dit is de beste work-around die ik kan bedenken. De $group operator stelt u in staat om een ​​_id . te bouwen op meerdere velden. bijv. {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}} . Als u dit doet, ontstaat er een groepering voor alle bestaande combinaties van uw verschillende sleutels. U kunt uw sleutels mogelijk op deze manier groeperen en vervolgens handmatig de resultaten in de client optellen.

Laat me toelichten. Laten we zeggen dat we een verzameling vormen hebben. Deze vormen kunnen een kleur, een grootte en een soort hebben (vierkant, cirkel, enz.). Een aggregatie op een ID met meerdere sleutels kan er als volgt uitzien:

db.shapes.aggregate({$group:{_id:{"f1":"$f1", "f2":"$f2", "f3":"$f3"}, count:{"$sum":1}}})

en keer terug:

"result" : [
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "medium",
                "f3" : "triangle"
            },
            "count" : 4086
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4138
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "big",
                "f3" : "square"
            },
            "count" : 4113
        },
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4145
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "square"
            },
            "count" : 4062
        }

... enzovoort

U zou dan de resultaten aan de klantzijde samenvatten, over een drastisch verminderd aantal vermeldingen. Ervan uitgaande dat het aantal unieke waarden voor elke sleutel voldoende klein is in vergelijking met het totale aantal documenten, zou u deze laatste stap in een verwaarloosbare hoeveelheid tijd kunnen doen.




  1. Parseerfout:syntaxisfout, onverwachte '}' in C:\xampp\htdocs\lib\autors.php op regel 8

  2. Waarom en wanneer is het nodig om indexen in MongoDB opnieuw op te bouwen?

  3. mongodb c# selecteer specifiek veld

  4. Hoe krijg ik toegang tot Meteor's MongoDB vanaf een andere client, terwijl Meteor actief is?