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