代码之家  ›  专栏  ›  技术社区  ›  TheGribble

如何从动态表中获取1000个项目,编辑并更新它们?

  •  0
  • TheGribble  · 技术社区  · 6 年前

    我只是刚开始使用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个,因为列表现在可能已经改变了。

    1 回复  |  直到 6 年前
        1
  •  0
  •   TheGribble    6 年前

    我找到了一个方法:

                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);
    

    不过,还是觉得有点恶心。有没有一个内在的方式来做这件事?