사전 필드 ("UserRegistrations")를 보유하고있는 MongoDB 콜렉션 ("사용자")이 있습니다.
필드 정의는 다음
BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]
public Dictionary<string, UserRegistration> UserRegistrations = new Dictionary<string, UserRegistration>();
그것은 키 (문자열)과 값으로 사용자 오브젝트 구성 사전이다.
이것은 MongoDB를 반영하는 방법입니다 : 같은 키가 이미 존재하는 경우
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);
그것이 원인이 확인되지 않습니다
"UserRegistrations" : [{
"k" : "517ba4e1696b03108ccef51a",
"v" : {
"RegistrationDate" : ISODate("2013-07-21T18:57:42.589Z"),
"OtherInfo" : "123456test",
}
}],
나는 다음과 같은 예를 들어, $ AddToSet를 사용하는 경우 사전 필드에서 중복되어 나중에 MongoDB C# 드라이버에서 직렬화 오류가 발생합니다.
동일한 키가 이미 존재하지 않는 것을 어떻게 확인할 수 있습니까?
감사합니다.
안녕하세요, 답변 주셔서 감사합니다. 그러나 이것은 내가 찾고있는 것이 아닙니다. 컬렉션을 다른 "UserRegistrations"컬렉션으로 분리하는 것은 나중에 값 비싼 인덱싱을 필요로하는 카운터 NoSQL 방법입니다. 나는 16 메가 바이트를 필요로하지 않는다. 실제로 이것은 약 1 메가 바이트 정도면 충분하다. 그래서 이것은 나를위한 프로가 아니다. 내 응용 프로그램에서 문서를 편집하는 다른 방법은 나에게 좋지 않습니다.이 메서드는 비동기 적으로 호출 할 수 있습니다. 첫 번째 호출이 현재 문서를 가져오고 두 번째 호출도 가져 오면 그 동안 데이터가 충돌합니다. 필요한 것은 MongoDB 솔루션입니다 (AddToSet 또는 유사). – mnnsx
+1 감사합니다. – Aaron