AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

CRUD 작업 구성

이 가이드 에서는 Node.js 운전자 사용하여 읽기 및 쓰기 (write) 작업을 구성하는 방법을 학습 수 있습니다.

읽기 설정 (read preference) 설정하여 운전자 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 (read concern) 또는 쓰기 고려(write concern) 설정하여 운전자 데이터 일관성 및 내구성을 처리하는 방식을 제어할 수도 있습니다. 읽기 고려는 읽기 작업을 수행할 때 데이터에 필요한 내구성 수준을 지정하고, 쓰기 (write) 고려는 운전자 복제본 세트 에서 쓰기 (write) 작업의 승인을 기다리는 방법을 지정합니다.

다음 수준에서 쓰기 고려, 읽기 고려, 읽기 설정 옵션을 설정할 수 있습니다.

  • 재정의되지 않는 한 모든 작업 실행에 대한 기본값을 설정하는 클라이언트

  • 트랜잭션

  • Database

  • 컬렉션

앞의 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예시 를 들어, 트랜잭션 에 대해 읽기 고려 (read concern) 수준을 설정하다 클라이언트 에 대해 설정하다 읽기 고려 (read concern) 수준이 재정의됩니다.

읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

이 섹션에서는 각 수준에서 읽기 및 쓰기 (write) 설정을 구성하는 방법을 설명합니다.

이 예시 MongoClientOptions 객체 생성자에 전달하여 MongoClient 인스턴스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • SECONDARY 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 합니다.

  • local 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • 2 쓰기 고려 (write concern): 프라이머리 및 세컨더리 복제본 세트 멤버 중 하나가 쓰기 (write) 작업을 확인해야 합니다.

const clientOptions = {
readPreference: ReadPreference.SECONDARY,
readConcern: { level: "local" },
writeConcern: { w: 2 },
};
const client = new MongoClient("mongodb://localhost:27017", clientOptions);

또는 MongoClient 생성자에 매개 변수로 전달되는 연결 URI에 읽기 및 쓰기 (write) 설정을 지정할 수 있습니다.

const uri = "mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2";
const clientWithUri = new MongoClient(uri);

이 예시 TransactionOptions 객체 startTransaction() 메서드에 전달하여 트랜잭션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.

  • PRIMARY 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 합니다.

  • majority 읽기 고려 (read concern): 읽기 작업은 대부분의 복제본 세트 멤버에 기록된 인스턴스의 가장 최근 데이터를 반환합니다.

  • 1 쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버가 쓰기 (write) 작업을 확인해야 합니다.

const transactionOptions = {
readPreference: ReadPreference.PRIMARY,
readConcern: { level: "majority" },
writeConcern: { w: 1 },
};
const session = client.startSession();
session.startTransaction(transactionOptions);

이 예시 DbOptions 객체 db() 메서드에 전달하여 test_database 데이터베이스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • PRIMARY_PREFERRED 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 하거나, 프라이머리 멤버를 사용할 수 없는 경우 세컨더리 멤버에서 데이터를 검색합니다.

  • available 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • majority 쓰기 고려 (write concern): 모든 복제본 세트 멤버의 대다수가 쓰기 (write) 작업을 승인해야 합니다.

const dbOptions = {
readPreference: ReadPreference.PRIMARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: "majority" },
};
const db = client.db("test_database", dbOptions);

이 예시 CollectionOptions 객체 collection() 메서드에 전달하여 test_collection 컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • SECONDARY_PREFERRED 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 하거나, 사용 가능한 세컨더리 멤버가 없는 경우 프라이머리 멤버에서 데이터를 검색합니다.

  • available 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • 0 쓰기 고려 (write concern) : 쓰기 (write) 작업에 대한 승인을 요청 하지 않습니다.

const collOptions = {
readPreference: ReadPreference.SECONDARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: 0 },
};
const collection = db.collection("test_collection", collOptions);

MongoDB Server에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.

기본값 으로 Node.js 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. Node.js 운전자 특정 태그를 선호하도록 지시하려면 해당 태그를 읽기 설정 (read preference) 클래스 생성자에 매개변수로 전달합니다.

이 코드 예시 readPreference 옵션을 태그 세트 에 설정하여 test_database 가 다음 순서로 세컨더리 복제본 세트 멤버로부터 읽기를 선호하도록 지시합니다.

  1. 뉴욕 데이터 센터 ({ dc: 'ny' })의 멤버

  2. 샌프란시스코 데이터 센터 ({ dc: 'sf' })의 멤버

  3. 모든 세컨더리 멤버({})

const taggedReadPreference = new ReadPreference(
ReadPreference.SECONDARY,
[
{ dc: "ny" },
{ dc: "sf" },
{}
]
);
const dbWithTags = client.db(
"test_database",
{ readPreference: taggedReadPreference }
);

비프라이머리 읽기 설정 (read preference)이 있는 복제본 세트에 연결할 때 드라이버는 지연 시간 창 내에서 가장 가까운 유효한 복제본 세트 멤버에서 읽습니다. 샤딩된 클러스터에 연결할 때 드라이버는 지연 시간 창 내에서 접근 가능한 모든 mongos 인스턴스를 선택합니다. 읽기 설정 모드에 대해 자세히 알아보려면 읽기 설정 (read preference)을 참조하세요.

기본값으로 드라이버는 가장 가까운 유효한 서버의 핑 시간이 15 밀리초 이내인 서버만 사용합니다.

예시 를 들어 복제본 세트 에 5명의 멤버가 있고 가장 가까운 멤버의 핑 시간이 5 밀리초라고 가정해 보겠습니다. 기본값 localThresholdMS 가 15 밀리초인 경우, 다음 표에 표시된 것처럼 핑 시간이 20 밀리초 이하인 멤버만 지연 시간 창 내에 포함됩니다.

호스트
유형
핑 시간
지연 시간 창 내

host1

기본

5ms

host2

보조

9ms

host3

보조

13ms

host4

보조

24ms

No

host5

보조

42ms

No

지연 시간 창을 조정하려면 MongoClient() 생성자에 localThresholdMS 옵션을 전달합니다.

다음 예에서는 로컬 임계값을 35 밀리초로 지정합니다.

const clientWithLocalThreshold = new MongoClient("mongodb://localhost:27017", {
replicaSet: "repl0",
readPreference: ReadPreference.SECONDARY_PREFERRED,
localThresholdMS: 35
});

앞의 예시 에서 Node.js 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버 간에 읽기를 분산합니다.

참고

Node.js 운전자 mongos 인스턴스 통해 복제본 세트 와 통신할 때 localThresholdMS 값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

데이터 정렬 을 지정하여 읽기 및 쓰기 (write) 작업의 동작을 수정할 수 있습니다. 데이터 정렬은 대소문자 및 악센트 표시와 같이 문자열 비교를 위한 언어별 규칙 설정하다 입니다.

MongoDB 기본값 으로 바이너리 데이터 정렬 을 사용하여 문자열을 정렬합니다. 이 기본값 정렬은 ASCII 표준 문자 값을 사용하여 문자열을 비교하고 정렬합니다. 언어 및 국가 및 언어 설정에는 ASCII 표준과 다른 특정 문자 순서 규칙이 있으며, 작업에 다른 데이터 정렬 규칙 설정하다 적용 하도록 선택할 수 있습니다.

다음 수준에서 데이터 정렬을 지정할 수 있습니다.

  • 컬렉션: 컬렉션 작업에 대한 기본값 데이터 정렬을 설정합니다. 기존 컬렉션 에 대해서는 데이터 정렬을 정의할 수 없습니다.

  • 인덱스: 인덱스 사용하는 작업에 대한 데이터 정렬을 설정합니다.

  • 작업: 작업의 데이터 정렬을 설정하고 상속된 모든 데이터 정렬을 재정의합니다.

데이터 정렬 객체 에는 다음 필드가 포함되어 있습니다.

collation: {
locale: <string>,
caseLevel: <bool>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <bool>,
alternate: <string>,
maxVariable: <string>,
backwards: <bool>
}

collation 옵션을 설정할 때 locale 필드 지정해야 합니다. 다른 모든 필드는 선택 사항입니다. 지원되는 국가 및 언어 설정의 전체 목록과 locale 필드의 기본값은 MongoDB Server 매뉴얼에서 지원되는 언어 및 국가 및 언어 설정 을 참조하세요.

데이터 정렬을 지정하려면 collation 객체 만들고 해당 locale 필드 사용하려는 언어 데이터 정렬로 설정하다 . 그런 다음 이 객체 대상 데이터 정렬 수준에 해당하는 메서드에 옵션 매개 변수로 전달합니다.

이 섹션에는 컬렉션, 인덱스 및 작업 수준에서 데이터 정렬을 설정하다 예제가 포함되어 있습니다.

다음 예시 names 이라는 새 컬렉션 만들고 기본값 데이터 정렬을 "fr_CA" 국가 및 언어 설정 설정으로 설정합니다.

const db = client.db("db")
db.createCollection("names", {
collation: { locale: "fr_CA" },
});

다음 예시 와 같이 names 컬렉션 에 다른 데이터 정렬을 지정하는 인덱스 만들 수 있습니다.

const coll = db.collection("names");
coll.createIndex(
{ "last_name" : 1 },
{ "collation" : { "locale" : "en_US" } });

이전 섹션에서 만든 names 컬렉션에서 기본값 데이터 정렬을 재정의하는 작업을 실행 수 있습니다.

names 컬렉션에는 다음 문서가 포함되어 있습니다.

{ "_id" : 1, "first_name" : "Hans", "last_name" : "Muller" }
{ "_id" : 2, "first_name" : "Gunter", "last_name" : "Braun" }
{ "_id" : 3, "first_name" : "Günter", "last_name" : "Krause" }
{ "_id" : 4, "first_name" : "Jürgen", "last_name" : "Weber" }

이 예시 findOneAndUpdate() 메서드를 호출하여 first_name 값이 "Gunter"인 첫 번째 일치 문서 업데이트 . 이 코드는 "de" 국가 및 언어 설정 및 "phonebook" 국가 및 언어 설정 변형을 사용하여 데이터 정렬을 적용합니다.

coll.findOneAndUpdate(
{ first_name: { $lt: "Gunter" } },
{ $set: { verified: true } },
{ collation: { locale: "de@collation=phonebook" } },
);

앞의 예시 에서 phonebook 국가 및 언어 설정 설정 변형은 운전자 에 움라우트가 있는 문자를 움라우트가 없는 동일한 문자보다 먼저 정렬하도록 지시합니다. 결과적으로 이 작업은 first_name 값이 "Günter"인 문서 움라우트와 일치시키고 다음 업데이트 정보를 반환합니다.

{ lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 3, first_name: 'Günter', last_name: 'Krause' },
ok: 1 }

국가 및 언어 설정 변형에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 로컬 변형 을 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.