gpt4 book ai didi

javascript - MongoDB:如何根据ObjectID更新n条记录

转载 作者:行者123 更新时间:2023-12-02 17:09:13 26 4
gpt4 key购买 nike

我创建了一个包含 100 万个文档的集合,我尝试根据 ObjectID 选择其中的 50000 条记录,并更新其中一个值(我正在 Mongo shell 中工作,在 Ubuntu 上运行)。

是否可以定义 50000 个文档范围? 50000 范围内包含哪些文档并不重要,我只是想隔离一定数量的记录并使用主 id 运行更新操作,以便可以测量性能时间。

我尝试运行的代码不起作用:

  use Assignment
var _start = new Date()
db.FlightsDate.update({$set:{Airtime: 8888}}).limit(50000).hint({_id:1});
var _end = new Date();
print("Time to Bulk Update AirTime key for 50000 documents… " + ((_end _start)/1000));

...我发现 MongoDB 需要我在命令中包含一个查询来指定要更新哪些文档(我现在通过阅读其他帖子了解到 .limit 不会比.update 写入)。

请问有人可以建议一种方法,使我能够定义要更新的记录数吗?

感谢您的建议。

R,乔恩

最佳答案

如果您只是查找涵盖集合中 50,000 个文档的“范围”,那么最好的方法是首先查询并查找范围的“起始”和“结束”文档。然后将该“范围”规范应用于您的更新。

 var start_id = db.FlightsDate.find({}).limit(1).toArray()[0]._id;
var end_id = db.FlightsDate.find({}).skip(49999).limit(1).toArray()[0]._id;

var _start = new Date();
db.FlightsDate.update(
{ "_id": { "$gte": start_id, "$lte": end_id } },
{ "$set"; { "Airtime": 8888 } },
{ "multi": true }
);

var _end = new Date();
( _end - _start )/1000;

如果您想在附加范围内添加下 50,000 个,则:

 var start_id = db.FlightsDate.find(
{ "_id": { "$gt": end_id } }
).limit(1).toArray()[0]._id;

var end_id = db.FlightsDate.find(
{ "_id": { "$gt": end_id } }
).skip(49999).limit(1).toArray()[0]._id;

然后再做一遍。

关键是您需要知道在一个范围内从哪里“开始”以及何时“结束”,以将更新限制为仅 50,000 个文档,而无需任何其他标准。

另请注意更新方法中“multi”的用法。默认情况下,.update() 不会“更新”多个文档,本质上是第一个匹配项。因此,您要做的是更新“范围内的所有文档”,这就是您需要在此处应用“multi”的原因。

关于javascript - MongoDB:如何根据ObjectID更新n条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968862/

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