कर्मचारी एकल संस्थाएं हैं; इस प्रकार, आप शायद age
. मॉडल नहीं बनाना चाहते हैं विभागों और स्थानों और टीमों की समृद्ध संरचना में एक टीम के सदस्य की इतनी गहराई से। एक अलग employees
होना बिल्कुल ठीक है संग्रह करें और बस करें:
db.businesses.aggregate([
{$match: {"age": {$gt: 50} }}
,{$sort: {"age": -1} }
]);
अपने businesses
में गहराई से देखें संग्रह आपके पास हो सकता है:
{ teams: [ {name: "T1", employees: [ "E1", "E34" ]} ] }
वैकल्पिक रूप से, यह प्रयास करें:
db.businesses.aggregate([ your pipeline] ,{allowDiskUse:true});
ओपी में 10 बिज़ -> 10 लोक -> 10 विभाग -> 10 टीमें -> 100 एम्पीएस का सेटअप है। पहले 3 अनविंड डेटा का 10000x विस्फोट बनाता है लेकिन अंतिम उससे 100 गुना अधिक है। हम $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}}])