복제는 읽기 확장에 좋다. 읽기 연산시 데이터를 어디서 읽어올 것인지 설정할 수 있다.

단, 읽기 일관성을 고려해야한다. (읽기 일관성이 없다면, 방금 쓴 데이터를 읽으려고 할 경우, 데이터가 없다는 오류가 발생할 수 있다)

primary

프라이머리에서 읽기 연산을 수행한다. 항상 읽기 일관성을 보장한다. 다만, 복제 세트에 문제가 발생하여 프라이머리 노드를 선출하지 못하게 된다면, 오류가 발생한다.

primaryPreferred

프라이머리가 있다면 프라이머리에서 읽기 연산을 수행한다. 만약 복제 세트에 문제가 발생하여 프라이머리가 없다면, 세컨더리로부터 읽기를 수행한다.

secondary

항상 세컨더리에서 읽기를 수행한다. 프라이머리의 읽기 부하를 줄여 줄 수 있다. 다만, 가용한 세컨더리가 없다면 오류가 발생한다.

secondaryPreferred

기본적으로 세컨더리에서 읽기를 수행하되, 세컨더리 노드가 가용하지 않는다면 프라이머리 노드에서 읽는다.

nearest

네트워크 지연시간을 기반으로 가장 가까운 노드에서 읽기를 수행한다.