2015-12-09 67 views
2

我想檢查一下,如果我使用_id字段來引用來自不同集合的文檔,我將永遠不會有重複的_id,即在同一數據庫內的兩個不同集合中使用。在meteor/mongo集合中,_id字段在其集合或整個數據庫中是唯一的嗎?

使用流星(所以在minimongo和mongodb),是_id字段在其集合或整個數據庫中唯一?

+0

你使用什麼方式產生'_id'值?它們是由Meteor自動生成的嗎?請提供一個'_id'值的例子。 –

+0

下面是一個例子:'qhrEnh36tthTswiYv'。我認爲這是由mongo生成的。我使用附加在每個使用流星生成的mongo文檔上的'_id'值。 – Billybobbonnet

+0

不,這是由流星產生的。 –

回答

2

數據庫中的_id值是由流星使用Random.id()生成的。這些在所有系列中都是獨一無二

請注意,集合級別保證了MonogoDB中_id值的唯一性,這意味着每個集合的_id字段上始終存在唯一索引。沒有任何MongoDB機制可以確保各個集合的唯一性。

無論如何,Meteor的隨機ID永遠不會碰撞是一個相當安全的假設。

+1

正如你所說,這是一個「安全的假設」。但是,這仍然是一個假設。它們是否保證是獨一無二的(假設我有數百萬和數百萬的文檔和資源不是問題)?我的意思是,是否存在一種機制,如果在之前已經生成了Random.id(),它將被跳過並生成一個新的?因爲,如果不是的話,那麼*可能會發生碰撞(即使它們不太可能,但人們知道會贏彩票)。 – trusktr

+0

我們如何確保流星生成的id不會與集合中現有的碰撞? (拋出一個錯誤是不正確的,因爲它會破壞操作並阻止保存數據) – cenk

相關問題