دوره‌ها / MongoDB / One-to-Many (One-to-Many)

One-to-Many (One-to-Many)

15 دقیقه Article

One-to-Many: رابطه یک به چند 📚

رابطه One-to-Many زمانی است که یک document با چندین document دیگر ارتباط دارد. این رایج‌ترین نوع رابطه در MongoDB است.

روش Embedded (برای تعداد کم):

اگر تعداد documents فرزند کم است (مثلاً 2-10)، می‌توانید آن‌ها را embed کنید:

// User با addresses embedded
db.users.insertOne({
  name: "Ali",
  email: "ali@example.com",
  addresses: [
    { type: "home", street: "123 Main St", city: "Tehran", zipcode: "12345" },
    { type: "work", street: "456 Oak Ave", city: "Isfahan", zipcode: "54321" }
  ]
})

// Query
db.users.find({ "addresses.city": "Tehran" })

روش Referenced (برای تعداد زیاد):

اگر تعداد documents فرزند زیاد است (مثلاً صدها یا هزاران)، از Referenced استفاده کنید:

// User
db.users.insertOne({ 
  name: "Ali", 
  email: "ali@example.com",
  _id: ObjectId("507f1f77bcf86cd799439011")
})

// Orders با reference به user
db.orders.insertMany([
  { userId: ObjectId("507f1f77bcf86cd799439011"), product: "Laptop", price: 999.99, date: new Date() },
  { userId: ObjectId("507f1f77bcf86cd799439011"), product: "Mouse", price: 29.99, date: new Date() },
  { userId: ObjectId("507f1f77bcf86cd799439011"), product: "Keyboard", price: 79.99, date: new Date() }
])

// پیدا کردن orders یک user
db.orders.find({ userId: ObjectId("507f1f77bcf86cd799439011") })

// یا با aggregation
db.orders.aggregate([
  {{
    $match: {{ userId: ObjectId("507f1f77bcf86cd799439011") }}
  }},
  {{
    $lookup: {{
      from: "users",
      localField: "userId",
      foreignField: "_id",
      as: "user"
    }}
  }}
])
💡 نکته: قانون کلی: اگر تعداد documents فرزند کم است (کمتر از 100) و همیشه با parent استفاده می‌شوند، Embedded بهتر است. اگر زیاد هستند یا نیاز به query جداگانه دارند، Referenced استفاده کنید.
✅ یاد گرفتید: برای One-to-Many، اگر تعداد کم است Embedded و اگر زیاد است Referenced استفاده کنید!

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: One-to-Many Medium
سوال تمرین

🎯 تمرین: پیاده‌سازی One-to-Many

یک رابطه one-to-many بین users و posts بسازید.

پاسخ تمرین
JAVASCRIPT
// روش 1: Embedded (برای تعداد کم)
{
    _id: ObjectId("..."),
    name: "Ali",
    posts: [
        { title: "Post 1", content: "..." },
        { title: "Post 2", content: "..." }
    ]
}

// روش 2: Referenced (برای تعداد زیاد)
// User
{ _id: ObjectId("..."), name: "Ali" }

// Posts
{ _id: ObjectId("..."), user_id: ObjectId("..."), title: "Post 1" }

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

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