sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb samling som dynamisk

MongoDB .NET-drivrutinen erbjuder få möjligheter i sådana fall:

Polymorfism

Du kan bygga en hierarki av klasser och MongoDB-drivrutinen kommer att kunna bestämma en typ av objekt som det hämtas från databasen:

[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-drivrutinen skapar ytterligare fält _t i varje dokument som kommer att representera motsvarande klass.

Enkel klass

Du kan fortfarande ha Post klass och använd BsonIgnoreIfNull attribut för att undvika undantag för serialisering. MongoDB .NET-drivrutinen ställer in dessa egenskaper på null om de inte finns i din databas.

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

BsonDocument

Du kan också släppa ett starkt skrivet tillvägagångssätt och använda BsonDocument klass som är en dynamisk ordboksliknande struktur som representerar dina Mongo-dokument

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

Mer information här

dynamisk

Specificerar dynamic som generisk parameter för ICollection du bör få en lista över ExpandoObject som kommer att hålla alla värden du har i din databas.

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


  1. Resultatordning i MongoDB med $in?

  2. Sidekiq hittar inte rekord för Rails Active Job

  3. MongoDB listar tillgängliga databaser i java

  4. Yii2 Aktivt registrera hur man skapar relationer mellan mongomodeller