(MongoDB) A single update on a sharded collection must contain an exact match on _id 에러 상황

샤딩이 된 mongoDb 서버 환경에서
CUD작업이 이루어지면 다음과같은 에러가 발생할 수 있다.

A single update on a sharded collection must contain an exact match on _id (and have the collection default collation) or contain the shard key (and have the simple collation). Update request

위 상황은 해당 도큐먼트를 업데이트(updateFirst) 할 때 발생한 상황이다.
이러한 이유는 샤드 클러스터가 해당 도큐먼트가 위치하고 있는 샤드클러스터를 발견하지 못하고 있기 때문이다.  

해당 쿼리문에 shard key를 포함하지 않고 있었습니다.
그러므로 해당 도큐먼트를 확인하기 위해서는 모든 샤드클러스터를 확인해야 하는데
mongos는 그 위치를 알아 낼 수 없습니다.

만약 mongos가 모든 샤드클러스터를 brodcast하여 업데이트를 하게 된다면 multi:false라는 구문에 위반되는 상황입니다.

그러므로
위와같은 에러를 방지하기 위해서는

1. shardKey를 추가하거나 
2. unique key값인 _id필드를 명시하거나
3. multi : true롤 설정해야 합니다.

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기