使用 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();
我有一个用 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();