【发布时间】:2011-08-07 11:08:41
【问题描述】:
我在尝试向 Mongo 中的现有文档添加复杂类型时遇到问题。
我有以下两个课程。
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" : { "data" : 12, “data2”:123,“data3”:{“_t”:“ComplexClass”,“Bar”:“bar”,“Foo”:1234 } } }
文档正确插入。然后我修改其中一个值。
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);
出现在数据库中的文档。
{ "UserObjects" : { "data" : 12, "data2" : { "Bar" : "FooBar", "Foo" : -1234 }, "data3" : { "_t" : "ComplexClass", "Bar" : "bar", "Foo" : 1234 } }, "_id" : BinData(3,"W11Jy+hYqE2nVfrBdxn54g==") }
如果我尝试检索此记录,我会收到 FileFormatException。
var theDocument = collection.Find(query).First();
(未处理的异常:System.IO.FileFormatException:无法确定实际 t 要反序列化的对象类型。 NominalType 是 System.Object 并且 BsonType 是 Docum 耳鼻喉科)。
与 data3 不同,data2 没有鉴别器。我在做什么?
【问题讨论】:
标签: mongodb mongodb-.net-driver