Ovladač MongoDB .NET nabízí v takových případech několik možností:
Polymorfismus
Můžete vytvořit hierarchii tříd a ovladač MongoDB bude schopen určit typ objektu, který získá z databáze:
[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; }
}
Ovladač MongoDB vytvoří další pole _t
v každém dokumentu, který bude reprezentovat odpovídající třídu.
Jedna třída
Stále můžete mít Post
třídy a použijte BsonIgnoreIfNull
atribut, abyste se vyhnuli výjimce serializace. Ovladač MongoDB .NET nastaví tyto vlastnosti na null
pokud ve vaší databázi neexistují.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Můžete také vypustit silně typizovaný přístup a použít BsonDocument
class, což je dynamická struktura podobná slovníku, která představuje vaše dokumenty Mongo
var collection = db.GetCollection<BsonDocument>("posts");
Další podrobnosti zde
dynamický
Zadání dynamic
jako obecný parametr ICollection
měli byste získat seznam ExpandoObject
která bude obsahovat všechny hodnoty, které máte ve své databázi.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code