【问题标题】:Using FluentMongo to remove and update documents使用 FluentMongo 删除和更新文档
【发布时间】:2026-01-27 21:10:01
【问题描述】:

我想知道是否有人有一种干净的方式来使用 FluentMongo 处理删除和更新文档?

我正在使用 FluentMongo 创建一个存储库层;但是,无法删除或更新文档是很麻烦的。也许我错过了在保持适当的存储库模式的同时处理这个问题的方法?

public interface IRepository : IDisposable
{
    IQueryable<T> All<T>() where T : class, new();

    void Delete<T>(Expression<Func<T, bool>> expression)
        where T : class, new();

    void Update<TEntity>(TEntity entity) where TEntity : class, new();
}

谢谢。

【问题讨论】:

    标签: mongodb fluent-mongo


    【解决方案1】:

    最简单的方法是将标准 MongoCollection 包装在您的存储库方法后面。由于您的存储库是类型化的,您只需创建一个类型化的集合并从该集合中删除文档。这是一个示例实现。

     MongoCollection<T> collection = mongoserver.GetCollection<T>();
    
     public void Delete(string id)
     {   
          this.collection.Remove(Query.EQ("_id", id));
     }
    
     public void Delete(T entity)
     {
         this.Delete(entity.Id);
     }
    

    balexandre 于 2013 年 7 月 27 日添加

    使用FluentMongo,有一个属性可以检索MongoCollection&lt;T&gt;,这对于高级查询很有用,例如,如果我们想删除我们集合中的所有文档,我们会这样写:

    public void DeleteAll() {
        var collection = myRepository.Collection;
        collection.RemoveAll();
    }
    

    如果您想返回确认所有文档确实已删除,请使用 Ok 属性

    public bool DeleteAll() {
        var collection = myRepository.Collection;
        return collection.RemoveAll().Ok;
    }
    

    【讨论】:

    • 用 Linq 表达式删除怎么样?这才是真正的问题;创建查询。