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

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

15 دقیقه Article

One-to-One: رابطه یک به یک 🔗

رابطه One-to-One زمانی است که یک document با دقیقاً یک document دیگر ارتباط دارد. در MongoDB، معمولاً از Embedded Documents برای این نوع رابطه استفاده می‌شود.

روش Embedded (توصیه می‌شود):

برای One-to-One، معمولاً بهتر است document را embed کنید:

// User با Profile embedded
db.users.insertOne({
  name: "Ali",
  email: "ali@example.com",
  profile: {
    bio: "Full-stack Developer",
    website: "ali.com",
    location: "Tehran",
    skills: ["JavaScript", "MongoDB", "Node.js"]
  }
})

// Query
db.users.findOne({ name: "Ali" })
// نتیجه شامل profile هم می‌شود

روش Referenced:

اگر profile خیلی بزرگ است یا نیاز به query جداگانه دارد:

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

// Profile جداگانه
db.profiles.insertOne({ 
  _id: ObjectId("507f1f77bcf86cd799439011"), 
  bio: "Developer",
  website: "ali.com"
})

// Join با aggregation
db.users.aggregate([
  {{
    $lookup: {{
      from: "profiles",
      localField: "profileId",
      foreignField: "_id",
      as: "profile"
    }}
  }}
])
💡 نکته: برای One-to-One، معمولاً Embedded بهتر است چون query ساده‌تر می‌شود و نیازی به join نیست. فقط اگر profile خیلی بزرگ است یا نیاز به query جداگانه دارید، از Referenced استفاده کنید.
✅ یاد گرفتید: برای One-to-One، معمولاً Embedded Documents بهتر است چون query ها ساده‌تر و سریع‌تر می‌شوند!

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

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

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

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

یک رابطه one-to-one بسازید.

پاسخ تمرین
JAVASCRIPT
// Embedded (توصیه شده)
{
    _id: ObjectId("..."),
    name: "Ali",
    passport: {
        number: "123456",
        expiry: ISODate("2025-12-31")
    }
}

// Referenced
{
    _id: ObjectId("..."),
    name: "Ali",
    passport_id: ObjectId("...")
}

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

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