One-to-One (One-to-One)
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("...")
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.