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