MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Sammlung als dynamisch

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