在Vehicle
集合中,我有两种不同类型的文档-Suv
和Truck
。
public abstract class BaseCar
{
public Guid Id { get; set; }
public Guid Title { get; set; }
public int YearOfProduction { get; set; }
...
}
public class Suv : BaseVehicle
{
...
public List<Engine> Engines { get; set; }
}
public class Truck : BaseVehicle
{
...
public List<TruckPart> Parts { get; set; }
}
public class TruckPart
{
...
public List<Engine> Engines { get; set; }
}
public class Engine
{
...
public int HorsePower { get; set; }
}
现在我想通过YearOfProduction
和HorsePower
过滤Vehicles
的集合,得到所有的id's
,除了分别得到每种类型的文档,然后对每种类型的文档进行排序之外,有没有其他的方法呢?
var suv = database.GetCollection<Suv>("vehicles");
var trucks = database.GetCollection<Trucks>("vehicles");
//filters for suvs, trucks and then displaying a list of ids of all matching vehicles
1条答案
按热度按时间pokxtpni1#
要在MongoDB类中实现多态概念,需要应用
BsonKnownTypes
属性,让序列化器知道应该Map到哪个inherit/sub-class。参考文件:Polymorphism in MongoDB .NET Driver
您的BSON文档需要包含
_t
字段,该字段是指定其类型的鉴别符。例如:BsonDocument
**使用MongoDB. NET驱动程序,很难用Fluent API实现查询过滤器(由于强类型),因此下面的扩展方法是将
FilterDefinition<T>
转换为BsonDocument
。一堆Fluent查询,需要将它们组合成一个
BsonDocument
。BsonDocument
**传递这种方法在没有Fluent API的情况下会简单得多。和往常一样,您可以构建查询并使用MongoDB Compass(导出到特定语言)将其转换为
BsonDocument
。您的查询应如下所示: