Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requêtes agrégées MongoDB vs MySQL SELECT field1 FROM table

Les employés sont des entités uniques ; ainsi, vous ne voulez probablement pas modéliser age d'un membre de l'équipe si profondément dans la riche structure des départements, des sites et des équipes. C'est parfaitement bien d'avoir un employees séparé collection et faites simplement :

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

Au plus profond de vos businesses collection que vous pouvez avoir :

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

Sinon, essayez ceci :

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

L'OP a une configuration de 10 biz -> 10 loc -> 10 départements -> 10 équipes -> 100 emps. Les 3 premiers déroulements créent une explosion de données de 10 000x, mais le dernier est 100x au-delà. Nous pouvons réduire le hit en utilisant $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}}])