MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Coleção Mongodb como dinâmica


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