O driver MongoDB .NET oferece poucas possibilidades nesses casos:
Polimorfismo
Você pode construir uma hierarquia de classes e o driver MongoDB será capaz de determinar um tipo de objeto que é recuperado do banco de dados:
[BsonKnownTypes(typeof(Post), typeof(NewTypePost))]
public abstract class PostBase
{
[BsonId]
public string Id { get; set; }
}
public class Post: PostBase
{
public string Message { get; set; }
}
public class NewTypePost: PostBase
{
public string Image { get; set; }
}
O driver MongoDB criará um campo adicional
_t
em cada documento que representará a classe correspondente. Aula Única
Você ainda pode ter
Post
class e use BsonIgnoreIfNull
atributo para evitar a exceção de serialização. O driver MongoDB .NET definirá essas propriedades como null
se eles não existirem em seu banco de dados. public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Você também pode descartar a abordagem fortemente tipada e usar
BsonDocument
class que é uma estrutura dinâmica semelhante a um dicionário que representa seus documentos Mongo var collection = db.GetCollection<BsonDocument>("posts");
Mais detalhes aqui
dinâmico
Especificando
dynamic
como parâmetro genérico de ICollection
você deve obter uma lista de ExpandoObject
que conterá todos os valores que você tem em seu banco de dados. var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code