2015-09-03 37 views
1

在將數據插入數據庫之前,我計劃創建一個帶有_id的文檔。 我想用Meteor.uuid()(這在理論上總是返回unique id)生成此_id但我覺得在這下面git issue在流星冒險中使用自定義_id嗎?

謝謝,好抓。之所以沒有記錄是因爲 我們最終希望從字符串_ids轉移到本地二進制 Mongo _ids既然它在一個例子中使用過,我認爲我們應該提前 並記錄下來,然後再過橋。我會這樣做

它似乎是一個字符串id和二進制mongo之間的區別。回到我的問題,是否有一個很好的理由,我應該避免使用我的自定義_id

+0

問題是:爲什麼你需要一個自定義_id? –

+0

我相信問題中的「註釋」是關於'Meteor.uuid()'當時沒有記錄的。流星使用的默認'_id'是並且仍然是一個隨機的(但是是唯一的)字符串。正如「註釋」所說,對「替代」的偏好是(現在仍然是)Mongo'ObjectId'格式,它具有唯一性。這一切都歸結爲「你的客戶能夠產生和處理什麼?「,如果它確實需要做這樣的事情,或者它是否僅僅依靠」服務器生成的「_id值,但是如果你有一些」自定義「的東西,那就是獨一無二的,那就使用它。流星沒有問題 –

+0

@Michelem因爲我一直想命名我的_id「grandma」和「daddy」。 - 如果生成的有重複的插入將不起作用,或者我可能會調用upsert。服務器端。原因是我將文件存儲到具有_id名稱的文件夾中,因此我需要創建文檔,觀察ID,將文件複製到以此ID命名的文件夾中,然後僅標記文檔作爲「複製」,一次完成這樣做會更好,但它首先需要一個_id。 –

回答

0

當您創建Mongo.Collection時,您可以選擇Meteor處理方式創建_id用於文檔不存在的文檔,_id已經存在。你可以閱讀更多關於它here

要帶走的關鍵是如果它不是已經有_id。你可以自由地使用你想要的任何自定義的_id字段。在這一點上,這不再是一個流星問題,而是一個Mongo問題。請閱讀手動設置Mongo中的_id字段的優缺點。

回到你的問題,關於流星,沒有理由避免創建自己的_id字段。如果您想要使用自定義_id唯一標識該文檔,那麼您很好。

而且不用擔心Meteor.uuid()。它不再被記錄,所以我想它最終會消失。

0

MongoDB ObjectID由算法保證是唯一的,所以完全是衝突安全的。你可以擁有相同的安全性,但實際上只有一個增量計數器在所有應用程序服務器之間共享並保持不變,所以實際上是重新實現了db服務器上已有的東西。

從我的POV中,您應該選擇接受一點風險並生成一個隨機的大ID,或者使用MongoDB將它們提前給您。

對於後者,我的意思是你可以在你的集合上實現你的自定義ID生成,作爲一個空的save,以後你可以在實際的文檔保存中使用:你將支付額外的數據庫往返的價格,但如果你的功能涉及移動文件我相信它可以忽略不計。

我的個人建議是後一種解決方案。

+0

......當然,您的應用程序應該接受(忽略)僅在集合中偶爾發現的空(僅限_id)文檔,並且還不時清理殭屍。 – dbra