دوره‌ها / MongoDB / $unwind و $sort ($unwind & $sort)

$unwind و $sort ($unwind & $sort)

15 دقیقه Article

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

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.