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