sql >> Databáze >  >> NoSQL >> MongoDB

Kolekce Mongodb jako dynamická

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


  1. Platnost dat Mongoose vyprší, ale uchovávejte je v databázi

  2. jak zobrazit 0 pro týden, když tomuto týdnu neodpovídá žádný záznam v dotazu $week mongodb

  3. mongoexport vracející vědecký (exponenciální) zápis

  4. Jak aktualizovat pole _id v dokumentu mongodb