sql >> Databáze >  >> RDS >> Mysql

Agregační dotazy MongoDB vs. tabulka MySQL SELECT pole1 FROM

Zaměstnanci jsou samostatné entity; pravděpodobně tedy nebudete chtít modelovat age člena týmu tak hluboko v bohaté struktuře oddělení a míst a týmů. Je naprosto v pořádku mít samostatné employees sbírejte a jednoduše udělejte:

db.businesses.aggregate([
{$match: {"age": {$gt: 50} }}
,{$sort: {"age": -1} }
]);

Hluboko ve vašich businesses sbírka, kterou můžete mít:

{ teams: [ {name: "T1", employees: [ "E1", "E34" ]} ] }

Případně zkuste toto:

db.businesses.aggregate([ your pipeline] ,{allowDiskUse:true});

OP má nastavení 10 biz -> 10 míst -> 10 oddělení -> 10 týmů -> 100 emps. První 3 odvíjení vytvoří 10 000x explozi dat, ale poslední je 100x větší. Můžeme zmenšit přístup pomocí $filter :

db.businesses.aggregate([
{ $unwind: "$locations" },
{ $unwind: "$locations.departments" },
{ $unwind: "$locations.departments.teams" },

{$project: {
        XX: {$filter: {
                    input: "$locations.departments.teams.employees",
                    as: "z",
                    cond: {$gte: [ "$$z.age", 50] }
            }}
    }}
,{$unwind: "$XX"}
,{$sort: {"XX.age":-1}}])


  1. Náhodný záznam z databázové tabulky (T-SQL)

  2. SQL Server UNION - Jaké je výchozí ORDER BY Chování

  3. Kolik způsobů importu dat do mysql

  4. Jak mohu vytvořit mysql db pomocí Docker compose?