【发布时间】:2013-10-23 02:59:20
【问题描述】:
我有一个 MongoDB 集合(“Users”),其中包含一个字典字段(“UserRegistrations”)。
字段定义为:
BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]
public Dictionary<string, UserRegistration> UserRegistrations = new Dictionary<string, UserRegistration>();
它是一个字典,由一个键(字符串)和一个作为值的自定义对象组成。
这是它在 MongoDB 中的体现:
"UserRegistrations" : [{
"k" : "517ba4e1696b03108ccef51a",
"v" : {
"RegistrationDate" : ISODate("2013-07-21T18:57:42.589Z"),
"OtherInfo" : "123456test",
}
}],
当我使用 $AddToSet 时,如下例:
IMongoQuery query = Query.EQ("_id", new ObjectId(uid));
var kvp = new KeyValuePair<string, UserRegistration>("517ba4e1696b03108ccef51a", new UserRegistration()
{
RegistrationDate = DateTime.Now.ToUniversalTime(),
});
IMongoUpdate update = Update.AddToSet("UserRegistrations", kvp.ToBsonDocument());
collection.Update(query, update, UpdateFlags.Multi);
它不检查是否已经存在相同的键,导致 Dictionary 字段重复,随后导致 MongoDB C# 驱动程序中的反序列化错误。
如何确保不存在相同的密钥?
谢谢!
【问题讨论】:
标签: c# mongodb mongodb-.net-driver mongodb-query