簡體   English   中英

加入 Mongo DB?

[英]Joining in Mongo DB?

對於酒店預訂網站,在 SQL - 假設我有 2 張桌子

預訂 預訂編號 開始日期 結束日期 成本 酒店 ID(fk)
酒店 酒店編號 姓名 地點 ETC

在 SQL 中,我將內部加入 Booking with Hotel 以獲取與酒店相關的所有詳細信息。 在 MongoDB 中,有沒有辦法做到這一點? 擁有 2 個 collections 是正確的方法嗎? 或者我應該將酒店集合嵌入到預訂集合中? 請提供最佳方法的代碼,因為我最近才開始涉足 NoSQL DB。

當您查詢預訂時,您應該考慮從酒店集合中需要哪些信息。

在 SQL 中,通常的做法是規范化數據(例如酒店名稱),使其僅存儲一次,然后將參考 ID 存儲在相關表中並使用連接檢索該數據,例如在查找預訂時。

在 NoSQL 中,一種常見的做法是對數據進行部分反規范化以最小化查詢次數。

例如,當您查詢預訂時,您真的需要每次預訂和每家酒店的所有詳細信息嗎? 或者您是否只需要足夠的信息來呈現列表/概覽,並僅在用戶單擊預訂時檢索其他詳細信息?

如果您確實需要立即獲取所有數據,則需要在以下選項中進行選擇:

  • 將酒店的_id 存儲在預訂中。 查詢時使用 $lookup 檢索酒店數據
  • 將所有酒店數據嵌入到預訂列表中。 當任何酒店數據發生變化時,還要更新所有打開的預訂。

如果初始查詢的部分數據是可接受的,則在預訂中存儲 _id 和最少的酒店詳細信息(如名稱和位置)。 在查詢預訂列表/概覽時,酒店名稱和位置已經存在,無需連接或單獨查詢。

然后可以在用戶查看列表時在后台檢索每個酒店的剩余數據,或者在用戶選擇預訂時按需檢索。

這種混合方法需要在酒店名稱或位置發生變化時更新所有預訂(希望是罕見的事件),同時允許更快地檢索初始顯示所需的數據。 如果不是每次預訂都要求詳細信息,這也會減少數據傳輸。

哪種方法最適合特定情況將在很大程度上取決於界面設計。

您可以在 mongodb 中使用aggregationlookup

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM