$unwind و $sort ($unwind & $sort)
$unwind و $sort: باز کردن Arrays و مرتبسازی 📊
$unwind برای باز کردن arrays و تبدیل هر element به یک document جداگانه استفاده میشود. $sort برای مرتبسازی نتایج pipeline استفاده میشود.
$unwind:
// قبل از $unwind
{{ _id: 1, name: "Ali", hobbies: ["reading", "coding", "music"] }}
// بعد از $unwind
{{ _id: 1, name: "Ali", hobbies: "reading" }}
{{ _id: 1, name: "Ali", hobbies: "coding" }}
{{ _id: 1, name: "Ali", hobbies: "music" }}
// استفاده عملی
db.users.aggregate([
{{ $unwind: "$hobbies" }},
{{ $group: {{ _id: "$hobbies", count: {{ $sum: 1 }} }} }},
{{ $sort: {{ count: -1 }} }}
])
$sort:
// مرتبسازی صعودی (1)
db.users.aggregate([
{{ $sort: {{ age: 1 }} }}
])
// مرتبسازی نزولی (-1)
db.users.aggregate([
{{ $sort: {{ age: -1 }} }},
{{ $limit: 10 }} // 10 کاربر مسنتر
])
// مرتبسازی با چند فیلد
db.users.aggregate([
{{ $sort: {{ city: 1, age: -1 }} }}
])
💡 نکته: $unwind برای کار با arrays در aggregation pipeline بسیار مفید است. اگر array خالی باشد، document حذف میشود (مگر اینکه preserveNullAndEmptyArrays: true باشد).
✅ یاد گرفتید: $unwind برای باز کردن arrays و $sort برای مرتبسازی نتایج در pipeline استفاده میشوند!
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
تمرین: $unwind و $sort
Medium
سوال تمرین
🎯 تمرین: استفاده از $unwind
یک aggregation با $unwind بنویسید.
پاسخ تمرین
JAVASCRIPT
db.users.aggregate([
{ $unwind: "$hobbies" },
{ $sort: { age: -1, hobbies: 1 } }
])
// با preserveNullAndEmptyArrays
db.users.aggregate([
{ $unwind: { path: "$hobbies", preserveNullAndEmptyArrays: true } }
])
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.