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

spočítejte pole vnořeného dokumentu a celkovou částku v mongodb

MongoDB agregační kanál je k dispozici pro vyřešení vašeho problému. Podrobnosti získáte z pole mého zpracování pomocí $unwind a poté pomocí $group pro "součet" součtů:

db.collection.aggregate([
    // Unwind the array to de-normalize as documents
    { "$unwind": "$details" },

    // Group on the key you want and provide other values
    { "$group": { 
        "_id": "$details.itemcode",
        "itemname": { "$first": "$details.itemname" },
        "totalprice": { "$sum": "$details.price" },
        "totalqty": { "$sum": "$details.qty" }
    }}
])

V ideálním případě chcete $match nejprve tam odfiltrujte všechna irelevantní data. Toto je v podstatě dotaz MongoDB a bere všechny stejné argumenty a operátory.

Většina zde je opravdu jednoduchá. $unwind je něco jako "JOIN" v SQL s tím rozdílem, že ve vložené struktuře je "spojení" již vytvořeno, takže pouze "denormalizujete", jako by spojení udělalo mezi vztahy "jeden k mnoha", ale pouze v rámci samotný dokument. V podstatě "zopakuje" části "nadřazeného" dokumentu do pole pro každý člen pole jako nový dokument.

Poté $group funguje jako klíč, jako v "GROUP BY", kde "klíč" je _id hodnota. Všechno tam je "rozlišující" a všechny ostatní hodnoty shromažďují "operátoři seskupení".

Zde jsou operace jako $first vstupte. Jak je popsáno na stránce manuálu, přebírá „první“ hodnotu z „hranice seskupení“ zmíněné v „klíči“ dříve. Chcete to, protože všechny hodnoty tohoto pole jsou "pravděpodobně" stejné, takže je to logická volba, jak vybrat "první" shodu.

Nakonec je tu $sum operátor seskupení, který dělá to, co se očekává. Všechny dodané hodnoty pod "klíčem" se "sčítají" nebo "sčítají" dohromady a poskytují celkový součet. Stejně jako SQL SUM() .

Všimněte si také, že všechny $ předponou existuje způsob, jakým agregační rámec pracuje s proměnnými pro názvy "polí/vlastností" v rámci aktuálního zpracovávaného dokumentu. "Dot notation" se používá k odkazování na vložená "pole/vlastnosti" vnořené do názvu nadřazené vlastnosti.

Je užitečné naučit se agregaci v MongoDB. Pro obecné dotazy je to, co je pro SQL cokoliv nad rámec základního příkazu "SELECT". Nejen pro "seskupování", ale také pro další manipulaci.

Přečtěte si dokumentaci všech operátorů agregace a také se podívejte na mapování SQL na agregaci v dokumentaci jako obecné vodítko, pokud máte pro začátek nějaké znalosti SQL. Pomáhá vysvětlit pojmy a ukazuje některé věci, které lze udělat.




  1. Nový způsob správy databází s otevřeným zdrojovým kódem

  2. jak pracovat s více akcemi a získat počet pomocí mongodb?

  3. C# MongoDB:Jak správně namapovat doménový objekt?

  4. jak zjistit, zda se soubor úspěšně stahuje ze strany klienta v mean/angular js