更新许多对象时如何提高MongoDb性能

问题描述

我正在尝试读取一个JSON文件,其中包含约200.000行,每行包含一个格式如下的小型JSON文档:

{
   <some key properties>,<some 2-3 properties>,// unimportant for this question
   updateCounter1: -1,updateCounter2: 0,updateCounter3: 3
}

现在,我要将其插入到MongoDb中,文档应具有以下格式:

{
   <some key properties>,counter1: 3748,counter2: 722,counter3: 2848
}

这意味着,对于原始文件中具有相同键属性的每一行,其反更新应添加到已经存储在数据库中的内容的顶部。

在我的代码中,当前看起来像这样:

         let item = {
            query: {
               refSpHash: ...,gender: ...,age: ...,state: ...,district:  ...
            },set: {
               refSp: ...,msgSp: ...
            },counters: {
               counter1: 1,counter2: -2,counter3: 4
            }
         };

         // (....)

         let update = { $set: _.assign({},item.set,item.query),$inc: item.counters };

         collection.updateOne(item.query,update,{ upsert: true },(err) => { ... });

因此,我正在使用$inc运算符对输入值JSON给出的DB值进行相对增大/减小,对于其余属性使用$set进行相对增大/减小。 上面的代码是对输入文件中的每一行执行的,我正在使用async.eachSeries来逐行导入每一行。

现在的问题是,虽然它似乎可以正常工作,但要花很多时间才能完成。我大约半小时前就开始导入了,现在仍在导入。因此,很可能我刚刚编写了一些非常糟糕的代码。

有人可以帮助我改善导入逻辑,以便处理更快吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...