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