2014-10-06 3 views
-1
public class Person 
{ 
    List<Contact> Contacts {get;set;} 
} 

public abstract class Contact 
{ 
    string Value {get;set;} 
} 

public class Email : Contact 
{ 
} 

public class Chat: Contact 
{ 
} 

Я набрал коллекцию для Person.Mongo: Как запросить определенный производный класс в mongo? (Используя monogcsharpdriver 1.9.2)

Как я могу запросить mongodb для определенного производного типа (скажем, электронной почты), который имеет определенное значение в поле Значение?

Я могу построить запрос как Person.Contacts.Value = "someValue", но этот запрос возвращает результат, если «someValue» соответствует любому Chat.Value. Что мне нужно, Query должен искать только поле Email.Value и возвращать результат?

Благодарим вас заранее.

ответ

3

Ниже следует сделать это. Трюк заключается в том, чтобы добавить «_t» в запрос. Это можно сделать вручную или, как показано ниже, с помощью OfType.

var emails = db.GetCollection<Contact>("contacts") 
    .AsQueryable() 
    .OfType<Email>() 
    .Where(x => x.Value == "someValue");