簡體   English   中英

Mongoose模式/查詢最佳實踐(MongoDB,node.js)

[英]Mongoose schema/query best practices (MongoDB, node.js)

我試圖在node.js應用程序中使用Mongoose分解我的RDBMS心態,並且可以使用一些指導來獲得最佳實踐。

一個簡單的例子:假設有兩個集合,組織和聯系人。 這是一對多的關系,他們都需要孤獨。 但是,在索引方法中,我想返回一個組織對象數組,每個組織對象都有一個成員聯系對象數組。 (后來我想返回一組聯系人,每個聯系人都有一個組織對象。)

在我看來,我誤解了實現這一目標的最佳方法。 這是我到目前為止看到的選項:

  1. 在組織文檔中嵌入聯系人及其ID。 然后索引查詢可以是Organization.find({}, function(err, orgs) { orgs[n].contacts[n]...}) 缺點 :需要大量額外存儲空間,並且必須在更改“主”聯系人文檔時更新嵌入式聯系人文檔。

  2. 利用Mongoose的populate / DBRef結構在兩個表中存儲“外鍵”ID。 然后查詢可以是: Organization.find({}}.populate('contacts').run(...)缺點 :您必須在兩側存儲密鑰。

  3. 轉到更傳統的“外鍵”路線,只將組織ID存儲在聯系人文檔中。 查詢組織文檔,然后查詢組織查詢的回調中的所有聯系人,將數據合並到一個對象中以返回。 缺點 :多個查詢和額外的處理開銷(我相信我們必須獨立地找到這些組織的組織和聯系人,然后遍歷每個組織,在公共_id字段上手動匹配,將它們組合成新的輸出對象)。

我一定錯過了一個更好的選擇。 允許#3模式的東西,但返回所需的組合對象,開銷更少。

注意異步模塊似乎可以幫助解決這個問題,但這真的是唯一/最好的方法嗎?

這實際上取決於您要進行的查詢。 - 您的網站是否更多地依賴於聯系人或組織? - 您是否經常需要顯示組織中的所有聯系人? - 您需要在組織頁面上顯示哪些聯系人詳細信息?

等等。

所以這真的取決於你的項目的需求。 您的組織和聯系人頁面是否在不斷更新? 如果不是重復數據似乎不是一個壞主意,特別是如果你的網站更重讀。

底線 :考慮一下您在網站上的頁面以及需要顯示的頁面(因此需要進行哪些查詢)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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