Driver MongoDB .NET menawarkan beberapa kemungkinan dalam kasus seperti ini:
Polimorfisme
Anda dapat membangun hierarki kelas dan driver MongoDB akan dapat menentukan jenis objek yang diambil dari 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; }
}
Driver MongoDB akan membuat bidang tambahan _t di setiap dokumen yang akan mewakili kelas yang sesuai.
Kelas Tunggal
Anda masih dapat memiliki Post kelas dan gunakan BsonIgnoreIfNull atribut untuk menghindari pengecualian serialisasi. Driver MongoDB .NET akan mengatur properti tersebut ke null jika tidak ada di database Anda.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Anda juga dapat menghapus pendekatan yang sangat diketik dan menggunakan BsonDocument class yang merupakan struktur seperti kamus dinamis yang mewakili dokumen Mongo Anda
var collection = db.GetCollection<BsonDocument>("posts");
Detail selengkapnya di sini
dinamis
Menentukan dynamic sebagai parameter generik ICollection anda harus mendapatkan daftar ExpandoObject
yang akan menampung semua nilai yang Anda miliki di database Anda.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code