2013-10-08 132 views
1

我正在爲我的應用程序添加標籤支持,並計劃爲我的標籤有一個單獨的集合並生成我自己的_id值。我的計劃是從用戶輸入的標籤形成_id(例如,用戶輸入「計算機科學」將具有「計算機科學」)。我建立自己的_id的理由是_id強制唯一性,所以插入沒有重複會立即發生,而那些具有重複的插入會產生可以處理的錯誤。如果這不是一個好的表現方法,讓我知道另一種方法。流星 - 插入重複_id

假設上面是一個好方法...

最好先執行插入到集合而不檢查,看看是否具有相同_id的文件已經存在 - 允許的情況下發生的重複錯誤重複?如果是的話,應如何處理錯誤?在collection.insert回調函數中?

顯示推薦模式的任何示例代碼都會非常有用。

我想在插入前是否檢查重複的建議可能取決於隨着時間的推移預期重複的頻率。

回答

0

流星自動爲每個集合添加_id值,這些_ids都是不同的。您不應該提供_id字段,它會自動添加。

如果您想提供自己的自動增量ID字段,可以使用getNextSequence(),如mongo documentation中所述。

編輯 創建不同的值應該不會有什麼問題,你應該能夠:

CollectionName._ensureIndex('tag-id', {unique: 1, sparse: 1}); 
CollectionName.insert(data, function(err, id) { 
    //err should contain any duplication errors. 
}); 

或者,你可以創建一個addTag方法,將簡單地檢查,看看是否在標籤之前已經存在添加它。

+0

我對確保唯一性沒有任何問題,但更多的是在集合中不存在標籤的所有情況下對存在性進行檢查的性能。即使您可以在出現重複時處理錯誤,是否最好執行存在檢查?我編輯了我的問題,試圖提供一些清晰。 – Derek

+1

如果存在重複的插入,則collection.insert應該引發錯誤。 (我更新了我的答案,請參閱示例。)您可以處理插入回調中的重複錯誤。處理回調中的重複錯誤應該更便宜,然後運行另一個查詢來檢查id的存在。 –