2014-09-29 66 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(); 

我希望帮助。