gpt4 book ai didi

mongodb - 向mongodb中的1亿条记录添加一个新字段

转载 作者:可可西里 更新时间:2023-11-01 09:54:37 25 4
gpt4 key购买 nike

向超过 1 亿个 mongodb 文档添加新字段的最快和最安全的策略是什么?

背景

  • 在 3 节点副本集中使用 mongodb 3.0

  • 我们正在添加一个新字段 (post_hour),该字段基于当前文档中另一个字段 (post_time) 中的数据。 post_hour 字段是 post_time 到小时的截断版本。

最佳答案

我遇到了类似的情况,我创建了一个脚本来更新大约 2500 万个文档,更新所有文档需要花费大量时间。为了提高性能,我将更新后的文档一个一个地插入到一个新集合中,并重命名了新集合。这种方法很有用,因为我是插入文档而不是更新它们(“插入”操作比“更新”操作快)。

这是示例脚本(我还没有测试过):

/*This method returns postHour*/
function convertPostTimeToPostHour(postTime){
}

var totalCount = db.person.count();
var chunkSize = 1000;
var chunkCount = totalCount / chunkSize;
offset = 0;
for(index = 0; index<chunkCount; index++){
personList = db.persons.find().skip(offset).limit(chunkSize);
personList.forEach(function (person) {
newPerson = person;
newPerson.post_hour = convertPostTimeToPostHour(person.post_time);
db.personsNew.insert(newPerson); // This will insert the record in a new collection
});
offset += chunkSize;
}

当上面编写的脚本被执行时,新集合 'personNew' 将具有更新的记录,其中设置了字段 'post_hour' 的值。

如果现有集合有任何索引,您需要在新集合中重新创建它们。

创建索引后,您可以将集合名称“person”重命名为“personOld”,将“personNew”重命名为“person”。

关于mongodb - 向mongodb中的1亿条记录添加一个新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37980921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com