Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MongoDB-Aggregatabfragen im Vergleich zu MySQL SELECT field1 FROM-Tabelle

Mitarbeiter sind einzelne Einheiten; daher möchten Sie age wahrscheinlich nicht modellieren eines Teammitglieds so tief in der reichen Struktur von Abteilungen und Standorten und Teams. Es ist völlig in Ordnung, separate employees zu haben Sammlung und tun Sie einfach:

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

Tief in Ihren businesses Sammlung, die Sie haben können:

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

Versuchen Sie alternativ Folgendes:

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

Das OP hat ein Setup von 10 Biz -> 10 Loc -> 10 Depts -> 10 Teams -> 100 Emps. Die ersten 3 Abwicklungen erzeugen eine 10000-fache Datenexplosion, aber die letzte geht um das 100-fache darüber hinaus. Wir können den Treffer verkleinern, indem wir $filter verwenden :

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}}])