sql >> Database >  >> RDS >> Mysql

MongoDB geaggregeerde query's versus MySQL SELECT field1 FROM tabel

Medewerkers zijn afzonderlijke entiteiten; daarom wil je waarschijnlijk geen age modelleren van een teamlid zo diep in de rijke structuur van afdelingen en locaties en teams. Het is prima om aparte employees te hebben verzamelen en gewoon doen:

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

Diep in uw businesses verzameling die je kunt hebben:

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

U kunt ook dit proberen:

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

De OP heeft een setup van 10 biz -> 10 loc -> 10 depts -> 10 teams -> 100 emps. De eerste 3 afwikkelingen zorgen voor een dataexplosie van 10000x, maar de laatste is 100x meer. We kunnen de hit verkleinen door $filter te gebruiken :

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. Hoe selecteer ik alle kolommen uit een tabel, plus extra kolommen zoals ROWNUM?

  2. Room DB gebruiken in bibliotheekproject

  3. T-SQL-subquery Max (datum) en joins

  4. (My)SQL volledige join met drie tabellen