Tôi gặp sự cố khi cố thêm các loại phức tạp vào các tài liệu hiện có trong Mongo.Thêm các lớp phức tạp vào Mongo
Tôi có hai lớp sau đây.
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; }
}
Sau đó, tôi tạo đối tượng mới để chèn.
var bd = new UserObjectCollection() {
UserId = Guid.NewGuid(),
UserObjects = {
{ "data", 12 },
{ "data2", 123 },
{ "data3", new ComplexClass() { Bar= "bar", Foo=1234 } }
}
};
Chèn tài liệu.
mongoCollection.Insert(bd.ToBsonDocument());
Và tôi nhận được tài liệu kết quả.
{ "_id": BinData (3, "t089M1E1j0OFVS3YVuEDwg =="), "UserObjects": { "dữ liệu": 12, "data2": 123, "data3": { "_T": "ComplexClass" , "Bar": "bar", "Foo": 1234} }}
Tài liệu chèn chính xác. Sau đó, tôi sửa đổi một trong các giá trị.
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);
Tài liệu như xuất hiện trong cơ sở dữ liệu.
{"UserObjects": {"dữ liệu": 12, "dữ liệu2": {"Thanh": "FooBar", "Foo": -1234}, "data3": {"_t": "ComplexClass" , "Bar": "bar", "Foo": 1234}}, "_id": BinData (3, "W11Jy + hYqE2nVfrBdxn54g ==")}
Nếu tôi cố truy xuất bản ghi này, tôi nhận được một FileFormatException .
var theDocument = collection.Find(query).First();
(Unhandled Exception: System.IO.FileFormatException: Không thể xác định thực tế t ype của đối tượng để deserialize NominalType là System.Object và BsonType là Docum ent..).
Không giống như dữ liệu3, dữ liệu 2 không có phân biệt đối xử. Tôi đang làm gì vậy?