如何使用Mongo JS批量更新

疯狂编码器

我试图在所有文档中基于另一个字段插入一个新字段。目前,我有近3.3亿份文件。一张一张地更新要花费很多时间。下面是我的示例代码,

var db = connect('127.0.0.1:27017/sampleDatabase');
print('Database connect');
 
collectionsList = [1 .... 100];
 
collectionsList.forEach(addNewTimeField);
 
function addNewTimeField(value, index, array){ 
    let collectionName = 'name_' + value;
    db[collectionName].find().forEach(function(doc) {
        db[collectionName].update({_id:doc._id}, {$set:{"ts": new Date(doc.timeStamp)}});   
    });
    db[collectionName].createIndex({ "ts" : 1 }, { expireAfterSeconds: 31622400 }, { "background": true} );
}

有没有一种方法可以使用批量更新同时更新多个记录?提前致谢。

土生的

您可以尝试使用MongoDB v4.2中的聚合管道进行更新

db[collectionName].updateMany(
  {}, 
  [{ 
    $set: { ts: { $toDate: "$timeStamp" } }
  }]
);   

第二个选项是bulkWrite(),它将更新单个事务中的所有记录,

async function addNewTimeField(value, index, array){ 
  let collectionName = 'name_' + value;
  let allDocs = await db[collectionName].find({}, { timeStamp: 1 });
  let updateAllDocs = allDocs.map(({ _id, timeStamp }) => ({
    updateOne: {
      filter: { _id: ObjectId(_id) },
      update: { ts: new Date(timeStamp) }
    }
  }));
  db[collectionName].bulkWrite(updateAllDocs);
  db[collectionName].createIndex({ "ts" : 1 }, { expireAfterSeconds: 31622400 }, { "background": true} );
}

未经测试而准备好的bulkWrite查询,如果遇到任何问题,请通知我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用LINQ批量更新

来自分类Dev

使用CGridView批量更新

来自分类Dev

更新mongo文档时如何使用变量?

来自分类Dev

更新mongo文档时如何使用变量?

来自分类Dev

如何使用SQL Server批量更新?

来自分类Dev

如何使用Codeigniter数组执行批量更新?

来自分类Dev

如何使用SQL Server批量更新?

来自分类Dev

使用“用于更新”批量收集

来自分类Dev

使用python批量更新MySql

来自分类Dev

如何在批量Upsert中使用Mongo Pojos

来自分类Dev

如何使用节点js更新mongo中集合中所有文档的_id?

来自分类Dev

如何快速批量更新postgres中的序号

来自分类Dev

如何在laravel 4中批量更新

来自分类Dev

如何为批量更新准备JSON

来自分类Dev

如何在 SQLalchemy 中批量更新?

来自分类Dev

如何拦截和修改批量更新?

来自分类Dev

使用R批量插入/更新到mongoDB

来自分类Dev

在春季使用jdbcTemplate进行批量更新

来自分类Dev

使用NEST在ElasticSearch上进行批量更新

来自分类Dev

使用EntityFramework.Extended批量更新

来自分类Dev

使用计算批量更新django

来自分类Dev

使用ServiceStack Web服务批量更新

来自分类Dev

使用where语句批量更新mysql

来自分类Dev

使用forEach的MongoDB批量更新效率

来自分类Dev

MongoDB使用外部数据批量更新

来自分类Dev

使用mongodb在Rails中进行批量更新

来自分类Dev

在春季使用jdbcTemplate进行批量更新

来自分类Dev

使用Python批量更新SQL(Oracle)

来自分类Dev

使用ServiceStack Web服务批量更新