Использование драйвера 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(...);
Другие вопросы по тегам