删除(表达式<func <t,bool =“”>&gt;标准)MongoDB查询C#驱动程序</func <t,>

时间:2013-10-02 21:01:03

标签: c# mongodb mongodb-.net-driver

是否可以进行查询Expression<Func<T, bool>>并删除找到的所有文件?我正在使用mongoDB c#驱动程序,我从mongo存储库中获取了这个想法,但我没有在我的实体上继承任何基类,所以我没有类和访问泛型属性“id”

以下代码不起作用:

foreach (T entity in this.collection.AsQueryable<T>().Where(criteria))
{
    this.Delete(entity.Id);
}

任何建议?

3 个答案:

答案 0 :(得分:2)

您应该可以将查询传递给Remove。例如,删除所有name属性值为"test123"的文档:

collection.Remove(Query.EQ("name", "test123"));

这样,只需一次调用即可删除所有匹配的文档,而不是首先获取匹配项,然后单独删除它们(甚至可以使用$in运算符删除它们。)

答案 1 :(得分:0)

您可以创建以下通用扩展方法,以删除符合条件的所有文档。但是collection的Remove方法需要一些MongoQuery来查找应该删除的文档。如果你将传递id选择器,你可以构造一个按id选择文档的查询:

public static void RemoveAll<T>(this MongoCollection<T> collection,
    Expression<Func<T, bool>> criteria, Func<T, BsonValue> idSelector)
{
    foreach (T entity in collection.AsQueryable<T>().Where(criteria))
        collection.Remove(Query.EQ("_id", idSelector(entity)));
}

用法:

people.RemoveAll(p => p.Age > 50, p => p.Id);

答案 2 :(得分:0)

您可以使用:

collection.Remove(Query<T>.Where(criteria));