Использование драйвера C# MongoDB v2 с дискриминатором и полиморфизмом
Использование C# MongoDB LINQ с дискриминатором точно описывает, что я пытаюсь сделать, но я пытаюсь использовать новый официальный драйвер 2.0.1.
У меня есть ряд подклассов с их специализированными свойствами, все они наследуются от базового класса, содержащего общие свойства. Атрибуты дискриминатора выглядят хорошо, и я успешно сохранил набор документов с использованием подтипов.
Далее я ожидал, что смогу выполнить запрос, подобный следующему:
var subsetB = db.GetCollection<BaseClass>("Documents").AsQueryable<BaseClass>().OfType<SubclassB>();
Чтобы получить все документы типа SubclassB. Однако методы AsQueryable() и OfType(), упомянутые в документации и статьях, которые я обнаружил, по-видимому, недоступны.
Я что-то пропустил или есть альтернативный рекомендуемый метод достижения этого с новым драйвером?
2 ответа
Там нет особой поддержки для этого.
Вам нужно явно добавить фильтр для поля дискриминатора, _t
,
var results = await collection.Find(Builders<SubclassB>.Filter.Eq("_t", nameof(SubclassB))).ToListAsync();
Кажется, это работает для меня в последней версии драйверов:
var results = await GetCollection<BaseClass>("Documents").OfType<SubClass>.Find(...);