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

Jak spočítám více klíčů ve stejném dotazu $group agregace MongoDB?

Zde můžete použít několik různých přístupů:

  1. Použít mapu/zmenšit:nedělejte to. Právě teď by bylo mnohem rychlejší spustit agregační rámec 3x než použít funkci map reduction pro tento případ použití.

  2. Spusťte agregaci 3krát. To není optimální, ale pokud nemáte časová omezení, pak je to nejjednodušší možnost. Pokud vaše agregace stejně zaberou

  3. Tady je nejlepší řešení, které mě napadá. $group operátor vám umožňuje vytvořit _id na více polích. Např. {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}} . Tím vytvoříte seskupení pro všechny existující kombinace vašich různých klíčů. Tímto způsobem můžete potenciálně seskupit klíče a poté ručně sčítat výsledky v klientovi.

Dovolte mi to upřesnit. Řekněme, že máme sbírku tvarů. Tyto tvary mohou mít barvu, velikost a druh (čtverec, kruh atd.). Agregace na víceklíčovém ID může vypadat takto:

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

a vrátit se:

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

... a tak dále

Poté byste sečetli výsledky na straně klienta přes drasticky snížený počet záznamů. Za předpokladu, že počet jedinečných hodnot pro každý klíč je dostatečně malý ve srovnání s celkovým počtem dokumentů, můžete tento poslední krok provést za zanedbatelné množství času.




  1. Mongodb odpovídá znakům s diakritikou jako základnímu znaku

  2. Úlomky MongoDB a konfigurační servery na stejném serveru?

  3. MongoDB nefunguje s PHP na WAMP

  4. Regex pro MongoDB ObjectID