代码之家  ›  专栏  ›  技术社区  ›  joacoleza

使用mongodb c#驱动程序从文档内的集合中排除项目

  •  0
  • joacoleza  · 技术社区  · 6 年前

    我有一个用C编写的应用程序,它使用mongoDB的C驱动程序。删除是逻辑的,因此实体具有布尔属性 删除 . 假设我有这些课程:

    public class Author
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public IList<Book> Books { get; set; }
        public bool Deleted { get; set; }
    }
    
    public class Book
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public bool Deleted { get; set; }
    }
    

    我想让所有未删除的作者都有他们未删除的书,但我不知道如何从结果中排除这些书。

    我有这段代码,但我不能排除已删除的书籍。

    _collection.FindAsync(x => !x.Deleted)).ToList();
    

    我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   CodeFuller    6 年前

    通过使用内部过滤器添加投影,可以排除已删除的图书:

    _collection.Find(x => !x.Deleted)
        .Project(x => new Author
        {
            Id = x.Id,
            Name = x.Name,
            Books = x.Books.Where(b => !b.Deleted).ToList(),
            Deleted = x.Deleted,
        }) .ToList();
    

    可能会删除作者的所有书籍。如果要从结果输出中筛选没有活动图书的作者,请添加适当的检查:

    _collection.Find(x => !x.Deleted && x.Books.Any(b => !b.Deleted))
        .Project(x => new Author
        {
            Id = x.Id,
            Name = x.Name,
            Books = x.Books.Where(b => !b.Deleted).ToList(),
            Deleted = x.Deleted,
        }) .ToList();