2017-01-22 1 views
3

하나의 항목 만이 인 목록 (TM은 속성으로 만 구성된 일부 구조 유형)으로 정의되고 동시에 쓰려고하는 10 개의 프로세스로 구성된 '항목'(아래의 Set() 메서드에서 매개 변수로 제공됨) ( 목록에 아무것도 추가하지 않고 ) items에 업데이트 :빌더는 어떻게합니까? <TA> .Update.Set()은 병렬 액세스를 처리합니까?

Builders<TK>.Update.Set("Items", items); 

업데이트를 변형 와 BSON 적어도 하나 개의 소자가 있다는 것을 의미한다.

그런 경우 MongoDB는 어떻게됩니까?

결국 마지막 프로세스를 단일 요소로 덮어 씁니다 (하나의 요소로이 목록을 남겨 둡니다)?

또는 해당 요소 (항목)를 해당 목록에 10 개 추가 하시겠습니까?

답변

2

병렬 액세스에서 어떻게 작동하는지 모르겠습니다. 그러나 Set operator은 항상 값을 삽입하여 덮어 씁니다.

배열에 새 값을 추가하려면 addToSet operator (새 값만 추가) 또는 push operator을 사용해야합니다.

너무 빌더로 액세스 할 수 있습니다 :

Builders<TA>.Update.AddToSet 
Builders<TA>.Update.Push 
+0

감사 일을. 실제로 덮어 쓰기 동작에 관심이 있습니다. 내 질문에 묻는 이유는 몇 가지 이상한 이유로 Set 연산자 *가 덮어 쓰기 대신에 * 추가된다는 것입니다. 기묘한. – datps

+1

@datps 샘플 코드가 있습니까? 내 이해에서 그런 일이 있어서는 안된다. –

+0

실은 그렇게 될 수 없다고 밝혀졌습니다. 이 버그는 다른 MongoDB 문서에서 시작되었습니다. 다른 사람들의 노동 열정을 물려받는 것만 큼 ... – datps

관련 문제