sql >> Database teknologi >  >> RDS >> Mysql

MongoDB aggregerede forespørgsler vs. MySQL SELECT field1 FROM table

Medarbejdere er enkeltstående enheder; Derfor vil du sandsynligvis ikke modellere age af et teammedlem så dybt i den rige struktur af afdelinger og lokationer og teams. Det er helt fint at have separate employees indsamling og blot gør:

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

Dybt i dine businesses samling du kan have:

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

Alternativt kan du prøve dette:

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

OP har en opsætning på 10 biz -> 10 loc -> 10 depts -> 10 hold -> 100 emps. De første 3 afviklinger skaber en 10000x eksplosion af data, men den sidste er 100x ud over det. Vi kan formindske hit ved at bruge $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. Hvordan begrænser man flere tal ved at filtrere flere kolonner på MySql?

  2. Vælg Bulk Collect into Oracle Eksempel

  3. Hvordan angiver jeg en adgangskode til 'psql' ikke-interaktivt?

  4. Python og MySQL print resultater