如何使用MongoDB .Net Driver实现多文档数组指定元素批量移除?
C# MongoDB.Driver 对应实现代码
你需要先安装MongoDB.Driver NuGet包,再引用对应命名空间:
using MongoDB.Driver; // 用BsonDocument写法需额外引用: using MongoDB.Bson;
写法1:强类型实体写法(推荐,有编译校验)
如果你预先定义了stores集合对应的实体类,示例如下:
public class Store { public ObjectId Id { get; set; } public List<string> Fruits { get; set; } // 其他业务字段 }
对应更新逻辑:
// 1. 获取stores集合的操作实例,mongoDatabase为你初始化好的IMongoDatabase实例 var storeCollection = mongoDatabase.GetCollection<Store>("stores"); // 2. 构造更新规则:从Fruits数组中移除值为apples、bananas的元素 var updateRule = Builders<Store>.Update.PullFilter( store => store.Fruits, fruit => fruit.In("apples", "bananas") ); // 3. 执行批量更新,空过滤条件匹配所有文档 var updateResult = await storeCollection.UpdateManyAsync( FilterDefinition<Store>.Empty, updateRule );
写法2:BsonDocument松散写法(无需定义实体类)
如果你没有定义对应实体类,可直接用BsonDocument操作:
// 1. 获取stores集合的操作实例 var storeCollection = mongoDatabase.GetCollection<BsonDocument>("stores"); // 2. 构造更新规则 var updateRule = Builders<BsonDocument>.Update.PullFilter( "fruits", Builders<BsonDocument>.Filter.In(string.Empty, new []{"apples", "bananas"}) ); // 3. 执行批量更新 var updateResult = await storeCollection.UpdateManyAsync( FilterDefinition<BsonDocument>.Empty, updateRule );
你可以通过updateResult.ModifiedCount查看实际修改的文档条数,上述两种写法的逻辑和你提供的原生MongoDB语句完全等价。
内容的提问来源于stack exchange,提问作者Drilon Ahmetaj
相关产品推荐
相关产品推荐

