gpt4 book ai didi

javascript - 在现有集合(mongodb)的所有文档中添加一个字段?

转载 作者:行者123 更新时间:2023-11-30 07:24:11 25 4
gpt4 key购买 nike

我想向 myCollection 中的所有文档添加一个名为“serie”的字段,其中包含一个整数序列号,例如:

{"_id" : "507f191e810c19239de098db", "name" : "John", "serie" : "1"}
{"_id" : "507f191e810c19729de860ea", "name" : "Dave"}, "serie" : "2"}
{"_id" : "507f191e810c19729de564ou", "name" : "Kate"}, "serie" : "3"}
......

objectId (_id) 不适合人类显示或内存,所以我想保留它并添加另一个字段“serie”,其中包含简单、简短且唯一的数字来标识每个文档,例如序列号.所以我尝试了以下脚本,但在所有文档中都得到了相同的“serie”值:

for(var i=1; i < 543; i++){    
db.myCollection.update({},
{ $set: {"serie": i}},
{ upsert:false, multi: true });
}

感谢您的帮助。

最佳答案

你在这里所做的事情的问题本质上是你声明的 multi: true 部分。本质上你是说用这个数字更新“一切”,543 次。

要获得越来越多的数字,请执行以下操作:

var i = 1;
db.myCollection.find().forEach(function(doc) {
db.myCollection.update(
{ "_id": doc._id },
{ "$set": { "serie": i } }
);
i++;
)

或者从 MongoDB 2.6 及以后的批处理中更快

var i = 1;

var cmd = {
"update": "myCollection",
"updates": []
};

db.myCollection.find().forEach(function(doc) {

cmd.updates.push({
"q": { "_id": doc._id },
"u": { "$set": { "serie": i } }
});

if ( batch.length % 500 == 0 ) {
db.runCommand(cmd);
cmd.updates = [];
}
i++;

});

if ( cmd.updates.length > 0 )
db.runCommand(cmd);

所以速度不仅更快,因为不会在每次更新时拉取写入确认,而且因为它一次发送 500 个批量大小的更新。

关于javascript - 在现有集合(mongodb)的所有文档中添加一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839021/

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