sql >> Base de Datos >  >> NoSQL >> MongoDB

Colección mongodb como dinámica.

El controlador MongoDB .NET ofrece pocas posibilidades en tales casos:

Polimorfismo

Puede crear una jerarquía de clases y el controlador MongoDB podrá determinar un tipo de objeto que se recupera de la base de datos:

[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; }
}

El controlador MongoDB creará un campo adicional _t en cada documento que representará la clase correspondiente.

Clase única

Todavía puedes tener Post clase y uso BsonIgnoreIfNull atributo para evitar la excepción de serialización. El controlador MongoDB .NET establecerá esas propiedades en null si no existen en su base de datos.

public class Post
{   
    [BsonId]
    public string Id { get; set; }
    [BsonIgnoreIfNull]     
    public string Message { get; set; } 
    [BsonIgnoreIfNull]
    public string Image { get; set; }
}

BsonDocumento

También puede eliminar el enfoque fuertemente tipado y usar BsonDocument clase que es una estructura dinámica similar a un diccionario que representa sus documentos Mongo

var collection = db.GetCollection<BsonDocument>("posts");

Más detalles aquí

dinámico

Especificando dynamic como parámetro genérico de ICollection debería obtener una lista de ExpandirObjeto que contendrá todos los valores que tiene en su base de datos.

var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code