MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Collezione Mongodb come dinamica

Il driver MongoDB .NET offre poche possibilità in questi casi:

Polimorfismo

Puoi creare una gerarchia di classi e il driver MongoDB sarà in grado di determinare un tipo di oggetto che viene recuperato dal database:

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

Il driver MongoDB creerà un campo aggiuntivo _t in ogni documento che rappresenterà la classe corrispondente.

Classe singola

Puoi ancora avere Post classe e utilizzare BsonIgnoreIfNull attributo per evitare l'eccezione di serializzazione. Il driver MongoDB .NET imposterà tali proprietà su null se non esistono nel tuo database.

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

BsonDocumento

Puoi anche abbandonare l'approccio fortemente tipizzato e utilizzare BsonDocument classe che è una struttura dinamica simile a un dizionario che rappresenta i tuoi documenti Mongo

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

Maggiori dettagli qui

dinamico

Specificando dynamic come parametro generico di ICollection dovresti ottenere un elenco di EspandiOggetto che conterrà tutti i valori che hai nel tuo database.

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