[英]Joining in Mongo DB?
對於酒店預訂網站,在 SQL - 假設我有 2 張桌子
預訂 | 預訂編號 | 開始日期 | 結束日期 | 成本 | 酒店 ID(fk) |
---|
酒店 | 酒店編號 | 姓名 | 地點 | ETC |
---|
在 SQL 中,我將內部加入 Booking with Hotel 以獲取與酒店相關的所有詳細信息。 在 MongoDB 中,有沒有辦法做到這一點? 擁有 2 個 collections 是正確的方法嗎? 或者我應該將酒店集合嵌入到預訂集合中? 請提供最佳方法的代碼,因為我最近才開始涉足 NoSQL DB。
當您查詢預訂時,您應該考慮從酒店集合中需要哪些信息。
在 SQL 中,通常的做法是規范化數據(例如酒店名稱),使其僅存儲一次,然后將參考 ID 存儲在相關表中並使用連接檢索該數據,例如在查找預訂時。
在 NoSQL 中,一種常見的做法是對數據進行部分反規范化以最小化查詢次數。
例如,當您查詢預訂時,您真的需要每次預訂和每家酒店的所有詳細信息嗎? 或者您是否只需要足夠的信息來呈現列表/概覽,並僅在用戶單擊預訂時檢索其他詳細信息?
如果您確實需要立即獲取所有數據,則需要在以下選項中進行選擇:
如果初始查詢的部分數據是可接受的,則在預訂中存儲 _id 和最少的酒店詳細信息(如名稱和位置)。 在查詢預訂列表/概覽時,酒店名稱和位置已經存在,無需連接或單獨查詢。
然后可以在用戶查看列表時在后台檢索每個酒店的剩余數據,或者在用戶選擇預訂時按需檢索。
這種混合方法需要在酒店名稱或位置發生變化時更新所有預訂(希望是罕見的事件),同時允許更快地檢索初始顯示所需的數據。 如果不是每次預訂都要求詳細信息,這也會減少數據傳輸。
哪種方法最適合特定情況將在很大程度上取決於界面設計。
您可以在 mongodb 中使用aggregation
和lookup
。
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
db.bookings.aggregate([{
$lookup: {
from: "hotels",
localField: "HotelId",
foreignField: "HotelId",
as: "hotel"
}
}])
這將為您提供嵌套在預訂記錄中的hotel
object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.