Использование драйвера C # MongoDB v2 с дискриминатором и полиморфизмом

Использование C # MongoDB LINQ с дискриминатором в точности описывает то, что я пытаюсь сделать , но я пытаюсь использовать новый официальный драйвер 2.0.1.

У меня есть ряд подклассов с их специализированными свойствами, унаследованными от базового класса, содержащего общие свойства. Атрибуты дискриминатора кажутся прекрасными, и я успешно сохранил несколько документов, используя подтипы.

То, что я ожидал сделать дальше, было запросом, похожим на:

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

Чтобы получить все документы типа SubclassB. Однако методы AsQueryable () и OfType (), упомянутые в документации и статьях, которые я нашел, похоже, недоступны.

Я что-то пропустил или есть альтернативный рекомендуемый метод достижения этой цели с новым драйвером?


person Bob Gear    schedule 24.08.2015    source источник


Ответы (1)


Особой поддержки для этого нет.

Вам необходимо явно добавить фильтр для поля дискриминатора _t.

var results = await collection.Find(Builders<SubclassB>.Filter.Eq("_t", nameof(SubclassB))).ToListAsync();
person i3arnon    schedule 24.08.2015
comment
Спасибо за это - вы помогли мне решить основную проблему. Тем не менее, не лучше ли, пока я использую драйвер версии 1, потому что он, кажется, охвачен множеством примеров, сообщений в блогах и т. Д. Я считаю, что драйвер v2 с его асинхронной моделью программирования действительно трудно понять с как новичок в MongoDB. Я был бы рад рекомендации по этому поводу. - person Bob Gear; 24.08.2015
comment
@BobGear ну, это действительно зависит от тебя. Старый вариант устарел и не поддерживает async-await. Если вас это не волнует, я думаю, вы можете подождать, прежде чем двигаться вверх, пока не появится больше информации. Есть также бесплатные онлайн-курсы MongoDB, которые вы можете пройти. - person i3arnon; 24.08.2015