我有一個MongoDB集合(「用戶」),其中包含一個字典字段(「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#驅動程序中導致反序列化錯誤。
我怎樣才能確保相同的密鑰不存在了?
謝謝!
嗨,謝謝你的回答,但這不是我正在尋找的。 將集合分隔爲另一個「UserRegistrations」集合是計數器NoSQL方法,後者需要昂貴的索引。我不需要16mb,實際上大約1mb就足夠了,所以這不是我的專業版。 在我的應用程序中編輯文檔的另一種方法對我也不好,如果第一次調用獲取當前文檔,第二次調用獲取它,則此方法可以異步調用,同時,數據將會發生衝突。 我需要的是一個MongoDB解決方案(AddToSet或類似的)。 – mnnsx
+1謝謝,幫助我! – Aaron