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