我正在尝试在mongo中创建一个deleteAll方法,我可以一次删除多个记录,为方法提供一个要删除的对象ID列表
protected virtual DeleteResult DeleteAll(List<ObjectId> listId, WriteConcern concern = null)
{
return MongoCollection
.DeleteManyAsync(ItemWithListOfId(listId))
.Result;
}
protected FilterDefinition<T> ItemWithListOfId(List<ObjectId> id)
{
return Builders<T>.Filter.Eq("_id", id);
}
它没有给出任何错误,但也没有删除任何记录。 有人帮忙吗?
答案 0 :(得分:4)
您需要一个 In
过滤器方法来匹配列表中的Eq
值,而不是id
过滤器,这是mongodb的一个实现 $in
查询
protected FilterDefinition<T> ItemWithListOfId(List<ObjectId> id)
{
return Builders<T>.Filter.In("_id", id);
}
答案 1 :(得分:0)
对于mongo 1.10版,我尝试了以下代码段。
public void DeleteMany(List<string> entityIdList)
{
var bulkOp = this.Collection.InitializeUnorderedBulkOperation();
IMongoQuery query = null;
foreach (var entity in entityIdList)
{
ObjectId entityId;
if (ObjectId.TryParse(entity, out entityId))
{
query = query == null ? Query.EQ("_id", entityId) : Query.Or(query, Query.EQ("_id", entityId));
}
}
if (query != null)
{
bulkOp.Find(query).Remove();
bulkOp.Execute();
}
}