Der MongoDB .NET-Treiber bietet in solchen Fällen nur wenige Möglichkeiten:
Polymorphismus
Sie können eine Klassenhierarchie aufbauen und der MongoDB-Treiber kann einen Objekttyp bestimmen, der aus der Datenbank abgerufen wird:
[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; }
}
Der MongoDB-Treiber erstellt das zusätzliche Feld _t
in jedem Dokument, das die entsprechende Klasse darstellt.
Einzelklasse
Sie können immer noch Post
haben Klasse und verwenden Sie BsonIgnoreIfNull
-Attribut, um eine Serialisierungsausnahme zu vermeiden. Der MongoDB .NET-Treiber setzt diese Eigenschaften auf null
wenn sie nicht in Ihrer Datenbank vorhanden sind.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Sie können auch den stark typisierten Ansatz fallen lassen und BsonDocument
verwenden Klasse, die eine dynamische, wörterbuchähnliche Struktur ist, die Ihre Mongo-Dokumente darstellt
var collection = db.GetCollection<BsonDocument>("posts");
Weitere Details hier
dynamisch
Angabe von dynamic
als generischer Parameter von ICollection
Sie sollten eine Liste von ExpandoObject
die alle Werte enthält, die Sie in Ihrer Datenbank haben.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code