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