Nhân viên là những thực thể đơn lẻ; do đó, bạn có thể không muốn lập mô hình age
của một thành viên trong nhóm rất sâu sắc trong cấu trúc phong phú của các phòng ban và địa điểm và đội. Hoàn toàn tốt nếu có employees
riêng thu thập và chỉ cần thực hiện:
db.businesses.aggregate([
{$match: {"age": {$gt: 50} }}
,{$sort: {"age": -1} }
]);
Tìm hiểu sâu về businesses
bộ sưu tập bạn có thể có:
{ teams: [ {name: "T1", employees: [ "E1", "E34" ]} ] }
Hoặc, hãy thử cách này:
db.businesses.aggregate([ your pipeline] ,{allowDiskUse:true});
OP có thiết lập 10 biz -> 10 loc -> 10 depts -> 10 team -> 100 emps. 3 lần mở đầu tiên tạo ra sự bùng nổ dữ liệu gấp 10000 lần nhưng lần cuối cùng vượt quá 100 lần. Chúng tôi có thể thu nhỏ lần truy cập bằng cách sử dụng $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}}])