Mongoの既存のドキュメントに複雑な型を追加しようとすると問題が発生します。複雑なクラスをMongoに追加する
私は以下の2つのクラスを持っています。
public class UserObjectCollection {
[BsonId]
public Guid UserId { get; set; }
public Dictionary<string, object> UserObjects { get; set; }
public UserObjectCollection() {
UserObjects = new Dictionary<string, object>();
}
}
public class ComplexClass {
public string Bar { get; set; }
public int Foo { get; set; }
}
次に、挿入する新しいオブジェクトを作成します。
var bd = new UserObjectCollection() {
UserId = Guid.NewGuid(),
UserObjects = {
{ "data", 12 },
{ "data2", 123 },
{ "data3", new ComplexClass() { Bar= "bar", Foo=1234 } }
}
};
文書を挿入します。
mongoCollection.Insert(bd.ToBsonDocument());
結果のドキュメントが表示されます。
{ "_id":BINDATA(3、 "t089M1E1j0OFVS3YVuEDwg ==")、 "UserObjects":{ "データ":12、 "DATA2":123、 "DATA3":{ "_t": "ComplexClass" 、 "Bar": "bar"、 "Foo":1234} }}
文書が正しく挿入されます。次に、値の1つを変更します。
var query = Query.EQ("UserObjects.data", BsonValue.Create(12));
collection.FindAndModify(
query,
SortBy.Null,
Update.SetWrapped<ComplexClass>("data2", new ComplexClass() { Foo = -1234, Bar = "FooBar" }),
returnNew: false,
upsert: true);
ドキュメントはデータベースに表示されます。
{"データ":12、 "データ2":{"バー": "FooBar"、 "Foo":-1234}、 "data3":{"_t": "ComplexClass" "BooData"(3、 "W11Jy + hYqE2nVfrBdxn54g =="))
このレコードを取得しようとすると、FileFormatExceptionが返されます。
var theDocument = collection.Find(query).First();
(未処理の例外:System.IO.FileFormatException:逆シリアル化オブジェクトの実際のT YPEを決定することができないNominalTypeはSystem.ObjectのとBsonTypeがDocum ENTです。)。
data3とは異なり、data2にはディスクリミネータはありません。私は何をやっている?