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

Exclude items from a collection inside a document with mongodb c# driver

我有一个用 C# 编写的应用程序,它使用 mongoDB 的 c# 驱动程序。删除是合乎逻辑的,所以实体有一个布尔值 属性 deleted。所以想象一下我有这些 类:

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

我错过了什么?

您可以通过添加带内部过滤器的投影来排除已删除的图书:

_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();