MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kolekcja Mongodb jako dynamiczna

Sterownik MongoDB .NET oferuje w takich przypadkach kilka możliwości:

Polimorfizm

Możesz zbudować hierarchię klas, a sterownik MongoDB będzie w stanie określić typ obiektu, który zostanie pobrany z bazy danych:

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

Sterownik MongoDB utworzy dodatkowe pole _t w każdym dokumencie, który będzie reprezentował odpowiednią klasę.

Pojedyncza klasa

Nadal możesz mieć Post klasę i użyj BsonIgnoreIfNull atrybut, aby uniknąć wyjątku serializacji. Sterownik MongoDB .NET ustawi te właściwości na null jeśli nie istnieją w Twojej bazie danych.

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

BsonDokument

Możesz także porzucić podejście silnie typowane i użyć BsonDocument klasa, która jest dynamiczną strukturą podobną do słownika, która reprezentuje twoje dokumenty Mongo

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

Więcej szczegółów tutaj

dynamiczny

Określanie dynamic jako ogólny parametr ICollection powinieneś otrzymać listę Rozwiń obiekt który będzie zawierał wszystkie wartości, które masz w swojej bazie danych.

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. Sprawdź aktualną liczbę połączeń z MongoDb

  2. MongoDB agreguje pola bez wcześniejszej znajomości wszystkich pól

  3. Meteor mongodb $inc z aktualizacją

  4. Dlaczego moje identyfikatory MongooseJS ObjectId nie przechodzą testu równości?

  5. MongoDB 2.2 — Aktualizowanie dokumentu zagnieżdżonego w tablicy