2014-09-29 61 views
1

我想檢查一下,如果2000個URL存在於一個集合中,並且將那些不存在的以及其他字段作爲新文檔插入。我只需要更新已存在的時間戳字段。通常新的會少一些。MongoDB:哪一個更快:findOne +如果不存在insert或upsert?

目前我在async.each()中循環併爲每個響應做一個upsert,並在響應中使用updatedExisting字段來查看URL是否是新的。但也許我應該做findOne並插入或更新。另一個選擇是對async.each中的現有查詢進行批量查找並進行更新,並對新的批量插入進行批量插入。請指教!謝謝。

+2

對於2000年的網址,我非常懷疑會有差異。和往常一樣 - 親自嘗試並分析結果。 – 2014-09-29 01:05:36

+0

@SalvadorDali謝謝。我會檢查併發布結果,但是如果考慮到收集量增長到幾百萬個文檔並且要檢查的URL數量增長到5000個,您能否告訴我們有什麼區別? – user3211198 2014-09-29 01:27:59

+0

@ user3211198當你說你使用async.each()時,你的意思是這是在你的代碼中的應用程序級別?所以你從數據庫中獲取文件,然後循環? – Tim 2014-09-29 03:53:34

回答

0

OK,我認爲UPSERT會在您的情況很好地工作看看這個頁面:Mongo Bulk Upsert

,這是它如何工作的一個簡單的例子:

bulk.find({ item: "abc123" }).upsert().replaceOne(
    { 
    item: "abc123", 
    status: "P", 
    points: 100, 
    } 
); 
bulk.execute(); 

我希望幫助。