Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consultas agregadas do MongoDB versus tabela MySQL SELECT field1 FROM


Os funcionários são entidades únicas; assim, você provavelmente não deseja modelar age de um membro da equipe tão profundamente na rica estrutura de departamentos, locais e equipes. Não há problema em ter um employees separado coleção e simplesmente faça:
db.businesses.aggregate([
{$match: {"age": {$gt: 50} }}
,{$sort: {"age": -1} }
]);

No fundo de seus businesses coleção você pode ter:
{ teams: [ {name: "T1", employees: [ "E1", "E34" ]} ] }

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

O OP tem uma configuração de 10 biz -> 10 loc -> 10 depts -> 10 times -> 100 emps. Os primeiros 3 desdobramentos criam uma explosão de dados de 10.000x, mas o último é 100x além disso. Podemos reduzir o hit usando $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}}])