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

Hvordan tæller jeg flere nøgler i den samme MongoDB-sammenlægning $group-forespørgsel?

Der er et par forskellige tilgange, du kan bruge her:

  1. Brug kort/reducer:gør ikke dette. Lige nu ville det være meget hurtigere at køre aggregeringsrammen 3 gange end at bruge en kortreducerende funktion til denne brugssag.

  2. Kør aggregering 3 gange. Dette er ikke optimalt, men hvis du ikke har tidsbegrænsninger, er dette den nemmeste løsning. Hvis dine sammenlægninger alligevel tager

  3. Her er den bedste løsning, jeg kan komme i tanke om. $group operator giver dig mulighed for at bygge en _id på flere felter. For eksempel. {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}} . Hvis du gør dette, opretter du en gruppering for alle eksisterende kombinationer af dine forskellige nøgler. Du kan potentielt gruppere dine nøgler på denne måde og derefter manuelt summere på tværs af resultaterne i klienten.

Lad mig uddybe. Lad os sige, at vi har en samling af former. Disse former kan have en farve, en størrelse og en slags (firkantet, cirkel osv.). En sammenlægning på et multinøgle-id kunne se ud som:

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

og returner:

"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
        }

... og så videre

Du vil derefter opsummere resultaterne på klientsiden over et drastisk reduceret antal poster. Forudsat at antallet af unikke værdier for hver nøgle er tilstrækkeligt lille sammenlignet med det samlede antal dokumenter, kan du udføre dette sidste trin på ubetydelig tid.




  1. MongoDB $isNumber

  2. Angular2 ExpressJs - Filoverførsel til serveren

  3. Kræver Action Cable 5 Redis?

  4. Mongodb, find om en samling er tom, node.js