MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Collection Mongodb aussi dynamique

Le pilote MongoDB .NET offre peu de possibilités dans de tels cas :

Polymorphisme

Vous pouvez créer une hiérarchie de classes et le pilote MongoDB pourra déterminer un type d'objet qu'il récupère de la base de données :

[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; }
}

Le pilote MongoDB créera un champ supplémentaire _t dans chaque document qui représentera la classe correspondante.

Classe unique

Vous pouvez toujours avoir Post classez et utilisez BsonIgnoreIfNull attribut pour éviter l'exception de sérialisation. Le pilote MongoDB .NET définira ces propriétés sur null s'ils n'existent pas dans votre base de données.

public class Post
{   
    [BsonId]
    public string Id { get; set; }
    [BsonIgnoreIfNull]     
    public string Message { get; set; } 
    [BsonIgnoreIfNull]
    public string Image { get; set; }
}

BsonDocument

Vous pouvez également abandonner l'approche fortement typée et utiliser BsonDocument classe qui est une structure dynamique semblable à un dictionnaire qui représente vos documents Mongo

var collection = db.GetCollection<BsonDocument>("posts");

Plus de détails ici

dynamique

Spécifier dynamic comme paramètre générique de ICollection vous devriez obtenir une liste de ObjetDéveloppé qui contiendra toutes les valeurs que vous avez dans votre base de données.

var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code