2014-12-19 28 views
0

我有一個數據庫結構,其文檔使用一個外鍵來引用對方。即使MongoDB在JOIN查詢中表現不佳,我們也可以通過運行基於外鍵的單獨查詢來獲取文檔。MongoDB正確的自動增量方式

我可以使用MongoDB的ObjectID(_id),這是唯一的。但是它太長了,並且在客戶端顯示這個冗長的ID來查詢數據看起來並不那麼難看。我想在MongoDB中創建自定義自動遞增,這將解決這個問題,但MongoDB的文檔說:

一般在MongoDB中,你不會使用的_id字段的自動增量模式,或任何領域,因爲它不能針對包含大量文檔的數據庫進行擴展。

那麼什麼是

Collection: Products 
{ 
    Project_ID: 1001, <Auto Incrementing> 
    Product: "Example Product", 
    ..<Few other fields>.. 
} 


Collection: Payments 
{ 
    Project_ID: 1001, <Foreign key> 
    Pay_ID: 2001, <Auto Incrementing> 
    ..<Few other fields>.. 
} 


Collection: Others 
{ 
    Project_ID: 1001, <Foreign key> 
    Pay_ID: 2001, <Foreign key> 
    Other_ID: 3001, <Auto Incrementing> 
    ..<Few other fields>.. 
} 
+1

這是罕見的顯示'_id'到客戶端,對不對?您可以使用'POST'請求​​隱藏'_id'。 – Raptor 2014-12-19 04:07:42

+0

呃,並且關於每種顯示技術都允許枚舉表格行等。爲了讓OP長話短說:沒有自動增量。 – 2014-12-19 06:43:28

+1

@OP:我有這樣的感覺,你正在嘗試做的(明智或潛意識)是使用MongoDB作爲RDBMS。在MongoDB中沒有外鍵的概念,沒有自動增量。如果您嘗試使用MongoDB來模擬RDBMS,那麼會發生什麼:最終會出現一個過度規範化,表現不佳的系統,其代碼基礎臃腫。整個發展過程與一開始不同。在RDBMS中,您類似於您的域模型結構,並試圖回答您的問題。在MongoDB中,根據您想要回答的問題創建模型。 – 2014-12-19 06:57:20

回答

0

的MongoDB並不意味着像關係數據庫用於下面我數據結構的最佳解決方案。它不支持服務器端的外鍵概念。理想情況下,您必須嵌入子文檔。欲瞭解更多信息請參考這個帖子

MongoDB normalization, foreign key and joining