c# – 如何为文档加载取消设置字段?
发布时间:2020-12-16 01:59:16 所属栏目:百科 来源:网络整理
导读:我有一个完全动态的巨大表(没有映射到任何POCO).它有多个字段,其中一个名为two.如何为ArchiveId设置为1的每个文档删除此字段? 我已经尝试获取所有项目,然后保存每个但它给我错误.我怀疑db只是超时或者因为它正在工作和运行,因为我之后可以获得记录. 请注意,
我有一个完全动态的巨大表(没有映射到任何POCO).它有多个字段,其中一个名为two.如何为ArchiveId设置为1的每个文档删除此字段?
我已经尝试获取所有项目,然后保存每个但它给我错误.我怀疑db只是超时或者因为它正在工作和运行,因为我之后可以获得记录. 请注意,我有超过100万条记录,我正在做的这种方法可能非常糟糕,但我不知道更好.
我试过了什么 public void DeleteFieldByArchiveId(int id,string field) { var collection = _db.GetCollection("items"); collection.Find(Query.EQ("ArchiveId",id)) .ToList() .ForEach(x => { x[field] = null; collection.Save(x); }); } 编辑(我需要什么) db.items.update({ArchiveId:1},{$unset:{two:“”}},{multi:true}) 基本上这是我想用C#mongo驱动程序实现的.我刚刚在RoboMongo中测试了这个查询,它在大约20秒内从1m数据库中删除了所有字段而没有超时.如何在C#mongo驱动程序中执行此查询? 解决方法
下面是使用Update类的静态Unset方法执行查询的C#方法:
IMongoQuery query = Query.EQ("Activity",1); UpdateBuilder ub = Update.Unset("two"); MongoUpdateOptions options = new MongoUpdateOptions { Flags = UpdateFlags.Multi }; var updateResults = examples.Update(query,ub,options); 这导致: query = { "Activity" : 1 } update = { "$unset" : { "two" : 1 } } (更新表达式中的值2无关紧要per the documentation). 完整示例: using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; var client = new MongoClient(); // connect to localhost var server = client.GetServer(); var test = server.GetDatabase("test"); var examples = test.GetCollection("examples"); var query = Query.EQ("Activity",1); var ub = Update.Unset("two"); var options = new MongoUpdateOptions { Flags = UpdateFlags.Multi }; var updateResults = examples.Update(query,options); if (updateResults != null) { Console.WriteLine(updateResults); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |