我刚开始使用MongoDB,但到目前为止仍很喜欢。
现在,我需要遍历大数据表并分批处理记录,并假设一切顺利,将它们标记为已处理。
我可以这样收集数据:
var Client = new MongoClient();
var DB = Client.GetDatabase("test");
var collection = DB.GetCollection<Sample>("sample");
var filter = Builders<Sample>.Filter.Eq(b => b.NeedsProcessing, true);
var items = collection.Find(filter).Limit(1000);
我遍历集合中的项目,并假设一切都很好,我需要将这些项目标记为已处理。有没有一种方法可以清除所有这些项目的NeedsProcessing标志,而无需根据id对每个项目进行单独的更新查询?我认为我不能再更新前1000个,因为列表现在可能已经更改。
答案 0 :(得分:0)
我找到了一种方法:
var update = Builders<Datablob>.Update.Set(b => b.NeedsUploading, false);
var ids = itemsEn.AsQueryable().Select(i => i.ID);
var updateFilter = Builders<Datablob>.Filter.In(i => i.ID, ids);
collection.UpdateMany(updateFilter, update);
不过,还是有点讨厌。有内置的方法吗?