将记录从一个集合更新到另一个集合mongodb

时间:2017-08-21 08:53:31

标签: mongodb mongodb-query

我有一个要求,我必须将最近六小时插入的文件复制到另一个集合,我必须定期这样做。此外,如果目标集合中存在文档,则必须从源集合更新文档。

有关源集合的一些统计信息 -

  • 来源收藏有' JobId' &安培; ' ModifiedDate'作为其索引字段。
  • 源集合每个可以接收多达600万个插入/更新事件 一天。

我已经提到这些链接来提出这段代码 - move docs from one coll to another& Bulk.find.upsert

var copyDocsToJobModel = db.JobsModel.initializeUnorderedBulkOp()

var x = 5000
var counter = 0
var lastCopyTime = new Date(Date.now() - 6 * 60 * 60)

var prev_count = db.JobsModel.count()

db.Messages.find({"ModifiedDate":{$gte: lastCopyTime}}).forEach(
  function(doc){
    delete doc._id
    copyDocsToJobModel.find({'JobId': doc.JobId}).upsert().updateOne(doc);
    counter ++
    if( counter % x == 0){
      copyDocsToJobModel.execute()
      copyDocsToJobModel = db.JobsModel.initializeUnorderedBulkOp()
    }
  }
 )

var resp = copyDocsToJobModel.execute()

var curr_count = db.JobsModel.count()
[prev_count, curr_count]

代码按预期工作但我有以下查询 -

  • 由于流量很大,我们不想阻止 在将文档复制到目标集合时写入/更新。
  • 我们希望在复制时尽可能降低系统负载 记录
  • 可以在此处进行任何进一步的优化,以使脚本运行更快或消耗更少的资源

提前致谢。

0 个答案:

没有答案