2013-11-14 34 views
0

在我的MongoLab數據庫中通過nodejs將新文檔保存到mongodb集合之前,我使用model.count來檢查某些字段以防止重複條目:model.count不是用於快速異步寫入的可靠測試

MyModel.count({field1: criteria1, field2: criteria2}, function (err, count) { 
    if (count == 0) { 
    // Create new document and call .save() 
    } 
}); 

然而,在測試過程中我注意到的進程結束後,收集許多重複(在數量不一致的跨越測試運行),雖然不是很多,如果我沒有做.Count中()檢查。

由於MyModel.count()語句嵌入回調中,只要某個ReadStreams發出'readable'事件,就會反覆調用該回調語句,所以我懷疑存在由於快速寫入集合而導致的異步問題。具體而言,對MyModel.count的兩次或多次完全相同且幾乎同時的調用返回0count,並最終創建並保存(相同)文檔到集合。

聽起來可能嗎?如果是的話,我怎樣才能強制文件寫入的唯一性,而不設置超時或使用同步模式?

+2

你已經探索使用唯一索引:

您可以創建從它的模型之前通過您的架構添加索引? –

回答

1

正如彼得所評論的,強制唯一性的正確方法是在集合上創建一個unique index,然後處理code: 11000插入錯誤以從創建重複項的嘗試中恢復。

mySchema.index({field1: 1, field2: 1}, {unique: true});