2014-12-02 196 views
3

我正在运行Mongo 2.6.3我正在更新大约900条记录,有时候最多有5000条记录。之前我有过这样的循环,对于900个记录,这些高音耗时大约需要1分钟才能完成。MongoDB批量更新很慢

现在,我正在使用initializeUnorderedBulkOp API,对于900条记录大约需要40秒。为什么这么慢?

我基本上

var batch = collection.initializeUnorderedBulkOp({useLegacyOps: true}); 
// for loop 
batch.find(query).upsert().updateOne({my object}); 
batch.execute({w:0},function(err, result) { 

这是使用节点驱动程序。这些电话的网络面板屏幕截图http://cl.ly/image/0L2a0o0w1I1b

当数据较小时,所需时间较短,所以这绝对是一些记录问题。最后,我的对象不是很大,它们可能是9个键左右,没有大数据。

关于如何缩短这个时间的任何想法?

+0

'query'可以使用索引吗?如果没有,请确保它可以。 – JohnnyHK 2014-12-02 16:09:39

+0

我们可以有更多的信息吗?什么是查询?它是否被索引?什么是更新?集合上存在哪些索引? – wdberkeley 2014-12-02 19:10:42

+0

呃,索引是答案。你应该离开这个,所以我可以标记它。我很笨,没有意识到它。 – 2014-12-02 22:44:33

回答

2

根据您的评论,您的find查询未使用会提示完整收集扫描的索引。

为您的收藏添加一个索引,可以使用find(query);使用explain()确认它正在使用。