MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Колекция Mongodb като динамична

Драйверът MongoDB .NET предлага няколко възможности в такива случаи:

Полиморфизъм

Можете да изградите йерархия от класове и драйверът на MongoDB ще може да определи типа на обект, който се извлича от базата данни:

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

Драйверът MongoDB ще създаде допълнително поле _t във всеки документ, който ще представлява съответния клас.

Единичен клас

Все още можете да имате Post клас и използвайте BsonIgnoreIfNull атрибут за избягване на изключение при сериализация. Драйверът MongoDB .NET ще зададе тези свойства на null ако не съществуват във вашата база данни.

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

BsonDocument

Можете също така да се откажете от строго типизирания подход и да използвате BsonDocument клас, който е динамична подобна на речник структура, която представлява вашите Mongo документи

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

Повече подробности тук

динамичен

Указване на dynamic като общ параметър на ICollection трябва да получите списък с ExpandoObject който ще съдържа всички стойности, които имате във вашата база данни.

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Производителността на MongoDB при заявки за агрегиране

  2. Съвпадение на ObjectId към String за $graphLookup

  3. Изпратете данни от NodeJS обратно към същата html страница след изпращане на формуляр

  4. MongoDB валидна алтернатива ли е на релационните db + lucene?

  5. MongoDB $nin оператор за заявка