mongo C#按id删除多条记录

时间:2015-09-16 07:31:46

标签: c# mongodb database nosql

我正在尝试在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);            
    }

它没有给出任何错误,但也没有删除任何记录。 有人帮忙吗?

2 个答案:

答案 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();

        }           
    }