2013-03-05 72 views
1

所以我習慣於通過MySQL自動增加主ID來查找提交內容,但在使用MongoDB ORM封裝Mongoose後,我發現由於Mongo將數據存儲在不同的收集方式,沒有任何傳統的自動增量ID的概念。查找通過ID與MongoDB提交的輸入

我卡試圖弄清楚如何抓住提交現在因爲通常我會組織我的URL像這樣:

submission/34/category/slug-goes-here

由於34現在成爲一個基於UUID和Mongo的醜陋字符串,我不需要在我的URL中顯示它,但我想要一個唯一的URL來查找我的提交內容。

我在想也許有一套方法,當我將提交插入到我的數據庫中時,它會生成某種6字符的散列,例如zhXk40並且像這樣查看它。

我想知道如果我這樣做,性能權衡會是什麼。如果我對slu made進行了限制,然後用slu looked查看它們,並確認類別匹配,那麼效率會更高嗎?無論哪種方式,我將不得不檢查類別和slu match是否匹配,但我不確定在這種情況下是否真的需要ID。

什麼是創建路線+從數據庫中查找基於該路線的一些數據的最佳做法?

+0

我只是一個新的索引和唯一的字段添加到文檔中包含的用它來查找文檔。 – WiredPrairie 2013-03-05 11:58:13

回答

0

你應該知道的第一件事是: _id財產並不一定是「醜」 ObjectId字符串。

其實,_id只是需要其集合中是唯一的,所以如果你想使用自動遞增的ID,但是有沒有問題,...

如果你計劃你的數據庫中使用分片,然後使用自動遞增字段作爲_id是矯枉過正。

爲什麼?讀到這裏接受的答案:Should I implement auto-incrementing in MongoDB?

在我的應用程序,因爲我們不打算分片,然後我們使用一個索引,數字ID只是爲了更容易的可用性到最終用戶,以及內部的所有引用都ObjectId小號。

而且,這裏是在MongoDB中創建一個自動遞增領域的一個很好的政黨成員:「外部ID」 http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

+1

很好的回答。很高興知道我有這個選擇,但更多地思考它更像是我感興趣的一種痛苦。最終,如果我想利用分片,它似乎會變成一種痛苦,因爲我將不知道哪個集羣會增加其id。我現在就去查看它的對象ID。謝謝 :) – 2013-03-05 17:35:51

-2

Sheesh!如果我們能夠真正瞭解這裏的最佳做法,我們都會變得更好。說話的頭仍在說話,並且會持續一段時間。

我怎麼會這樣做是爲了儘可能地漂亮。如果我有一個可用的文本字符串來使其語義成爲最好的情況。

如果我不能這樣做,我會用你建議的哈希值。

對於這兩種解決方案來說,挑戰將是確保其獨特性。這意味着在保存之前查找。

在性能上,它與SQL相同。索引你用來查找的東西。 Mongo在複合索引方面做得很好,因此類別名稱和哈希將會非常快速地查找。

相關問題