Mam problemy podczas próby dodawania typów złożonych do istniejących dokumentów w Mongo.Dodawanie złożonych klas do Mongo
Mam następujące dwie klasy.
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; }
}
Następnie utworzę nowy obiekt do wstawienia.
var bd = new UserObjectCollection() {
UserId = Guid.NewGuid(),
UserObjects = {
{ "data", 12 },
{ "data2", 123 },
{ "data3", new ComplexClass() { Bar= "bar", Foo=1234 } }
}
};
Włóż dokument.
mongoCollection.Insert(bd.ToBsonDocument());
I otrzymuję wynikowy dokument.
{ "_id": BinData (3 "t089M1E1j0OFVS3YVuEDwg =="), "UserObjects": { "DATA": 12, "data2": 123, "danych3": { "'t": "ComplexClass" "Bar": "bar", "Foo": 1234} }}
Dokument jest wstawiany poprawnie. Następnie modyfikuję jedną z wartości.
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);
Dokument wyświetlany w bazie danych.
{"UserObjects": {"data": 12, "data2": {"Bar": "FooBar", "Foo": -1234}, "data3": {"_t": "ComplexClass" , "Bar": "bar", "Foo": 1234}}, "_id": BinData (3, "W11Jy + hYqE2nVfrBdxn54g ==")}
Jeśli spróbuję pobrać ten rekord, otrzymuję wyjątek FileFormatException .
var theDocument = collection.Find(query).First();
(Nieobsłużone Wyjątek System.IO.FileFormatException: Nie można określić rzeczywistej ţ ODZAJ przedmiotu deserializowania NominalType jest System.Object i BsonType jest Docum Ent..).
W przeciwieństwie do danych3, data2 nie ma dyskryminatora. Co ja robię?