使用带有标识符和多态性的c# MongoDB v2驱动程序

本文关键字:MongoDB v2 驱动程序 多态性 标识符 | 更新日期: 2023-09-27 18:09:23

使用c# MongoDB LINQ与discriminator描述了我正在尝试做的事情,但我正在尝试使用新的官方2.0.1驱动程序。

我有一系列子类,它们的特殊属性都继承自包含公共属性的基类。Discriminator属性看起来很好,我已经成功地保存了使用子类型的混合文档。

我期望接下来能够做的是一个类似的查询:

  var subsetB = db.GetCollection<BaseClass>("Documents").AsQueryable<BaseClass>().OfType<SubclassB>();

获取SubclassB类型的所有文档。然而,在我找到的文档和文章中提到的AsQueryable()和OfType()方法似乎不可用。

我是否错过了一些东西,或者是否有其他推荐的方法来使用新驱动程序实现这一点?

使用带有标识符和多态性的c# MongoDB v2驱动程序

没有特殊的支持

您需要显式地为discriminator字段_t添加一个过滤器。

var results = await collection.Find(Builders<SubclassB>.Filter.Eq("_t", nameof(SubclassB))).ToListAsync();

这似乎在最新版本的驱动程序中为我工作:

var results = await GetCollection<BaseClass>("Documents").OfType<SubClass>.Find(...);