ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

레거시 옵코드

이 페이지에서는 MongoDB에서 더 이상 지원하지 않는 레거시 옵코드에 대해 설명합니다. 이러한 레거시 옵코드는 다음과 같습니다.

  • MongoDB 5.0부터 더 이상 사용되지 않습니다.

  • MongoDB 5.1부터 지원되지 않습니다.

MongoDB 5.1부터는 OP_MSGOP_COMPRESSED만 MongoDB Server로 요청을 전송할 수 있는 유일한 지원 옵코드입니다.

OP_DELETE 메시지는 컬렉션에서 하나 이상의 문서를 제거하는 데 사용됩니다. OP_DELETE 메시지의 형식은 다음과 같습니다.

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values - see below for details.
document selector; // query object. See below for details.
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

ZERO

정수 값 0. 향후 사용 목적.

fullCollectionName

전체 컬렉션 이름, 특히 네임스페이스입니다. 네임스페이스는 연결에 .를 사용하여 데이터베이스 이름과 컬렉션 이름을 연결한 것입니다. 예를 들어, 데이터베이스 test 및 컬렉션 contacts의 경우 전체 컬렉션 이름은 test.contacts입니다.

flags

연산에 대한 비트 값입니다. 비트 값은 다음에 해당합니다.

  • 0 은 SingleRemove에 해당합니다. 설정하다 하면 데이터베이스 는 컬렉션 에서 일치하는 첫 번째 문서 만 제거 합니다. 그렇지 않으면 일치하는 모든 문서가 제거됩니다.

  • 1-31 사용 대상이 정해져 있습니다. 0으로 설정해야 합니다.

selector

제거할 문서를 선택하는 데 사용된 쿼리를 나타내는 BSON 문서입니다. 선택기에는 하나 이상의 요소가 포함되며 컬렉션에서 문서를 제거하려면 모든 요소가 일치해야 합니다.

OP_DELETE 메시지에 대한 응답이 없습니다.

OP_GET_MORE 메시지는 컬렉션의 문서를 데이터베이스에 쿼리하는 데 사용됩니다. OP_GET_MORE 메시지의 형식은 다음과 같습니다.

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 numberToReturn; // number of documents to return
int64 cursorID; // cursorID from the OP_REPLY
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

ZERO

정수 값 0. 향후 사용 목적.

fullCollectionName

전체 컬렉션 이름, 특히 네임스페이스입니다. 네임스페이스는 연결에 .를 사용하여 데이터베이스 이름과 컬렉션 이름을 연결한 것입니다. 예를 들어, 데이터베이스 test 및 컬렉션 contacts의 경우 전체 컬렉션 이름은 test.contacts입니다.

numberToReturn

쿼리 에 대한 첫 번째 OP_REPLY 메시지의 문서 수를 제한합니다. 그러나 결과가 numberToReturn보다 많은 경우 데이터베이스 여전히 커서 설정하고 cursorID 를 클라이언트 에 반환합니다. 클라이언트 운전자 SQL LIMIT 키워드와 같은 '제한' 기능을 제공하는 경우 호출 애플리케이션 에 지정된 수보다 많은 문서 반환되지 않도록 하는 것은 클라이언트 운전자 의 몫입니다.

numberToReturn인 경우:

  • 0, 데이터베이스 는 기본값 반환 크기를 사용합니다.

  • 음수이면 데이터베이스에서 해당 숫자를 반환하고 커서를 닫습니다. 해당 쿼리에 대한 더 이상의 결과를 가져올 수 없습니다.

  • 1, 서버는 이 값을 -1(으)로 취급합니다(커서가 자동으로 닫힘).

cursorID

OP_REPLY 에 포함된 커서 식별자입니다. 이 값은 데이터베이스 에서 가져온 값이어야 합니다.

데이터베이스는 OP_GET_MORE 메시지에 OP_REPLY 메시지로 응답합니다.

OP_INSERT 메시지는 하나 이상의 문서를 컬렉션에 삽입하는 데 사용됩니다. OP_INSERT 메시지의 형식은 다음과 같습니다.

struct {
MsgHeader header; // standard message header
int32 flags; // bit values - see below
cstring fullCollectionName; // "dbname.collectionname"
document* documents; // one or more documents to insert into the collection
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

flags

연산에 대한 비트 값입니다. 비트 값은 다음에 해당합니다.

  • 0 은 ContinueOnError에 해당합니다. 설정하다 하면 데이터베이스 는 대량 삽입이 실패하더라도( 예시 : 중복 ID로 인해) 처리 를 중지하지 않습니다. 이렇게 하면 대량 삽입이 일련의 단일 삽입과 유사하게 작동하지만, 마지막 삽입뿐만 아니라 삽입이 하나라도 실패할 경우 lastError가 설정하다 된다는 점이 다릅니다. 오류가 여러 번 발생하면 가장 최근의 오류만 getLastError에 의해 보고됩니다.

  • 1-31 사용 대상이 정해져 있습니다. 0으로 설정해야 합니다.

fullCollectionName

전체 컬렉션 이름, 특히 네임스페이스입니다. 네임스페이스는 연결에 .를 사용하여 데이터베이스 이름과 컬렉션 이름을 연결한 것입니다. 예를 들어, 데이터베이스 test 및 컬렉션 contacts의 경우 전체 컬렉션 이름은 test.contacts입니다.

documents

컬렉션에 삽입할 하나 이상의 문서입니다. 둘 이상이 있는 경우 순서대로 소켓에 차례로 기록됩니다.

OP_INSERT 메시지에 대한 응답이 없습니다.

OP_KILL_CURSORS 메시지는 데이터베이스에서 활성 커서를 닫는 데 사용됩니다. 이는 쿼리가 끝날 때 데이터베이스 리소스가 회수되도록 하는 데 필요합니다. OP_KILL_CURSORS 메시지의 형식은 다음과 같습니다.

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
int32 numberOfCursorIDs; // number of cursorIDs in message
int64* cursorIDs; // sequence of cursorIDs to close
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

ZERO

정수 값 0. 향후 사용 목적.

numberOfCursorIDs

메시지에 있는 커서 ID의 수입니다.

cursorIDs

닫을 커서 ID의 "배열"입니다. 둘 이상이 있는 경우 순서대로 소켓에 차례로 기록됩니다.

소진될 때까지 커서를 읽으면( OP_QUERY 또는 OP_GET_MORE가 커서 ID에 대해 0을 반환할 때까지 읽음) 커서를 종료할 필요가 없습니다.

OP_QUERY 메시지는 컬렉션의 문서를 데이터베이스에 쿼리하는 데 사용됩니다. OP_QUERY 메시지의 형식은 다음과 같습니다.

struct OP_QUERY {
MsgHeader header; // standard message header
int32 flags; // bit values of query options. See below for details.
cstring fullCollectionName ; // "dbname.collectionname"
int32 numberToSkip; // number of documents to skip
int32 numberToReturn; // number of documents to return
// in the first OP_REPLY batch
document query; // query object. See below for details.
[ document returnFieldsSelector; ] // Optional. Selector indicating the fields
// to return. See below for details.
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

flags

연산에 대한 비트 값입니다. 비트 값은 다음에 해당합니다.

  • 0 는 예약되어 있습니다. 0 로 설정하다 해야 합니다.

  • 1 은 TailableCursor에 해당합니다. 테일 가능은 마지막 데이터를 검색할 때 커서 가 닫히지 않음을 의미합니다. 오히려 커서 가 최종 객체의 위치를 표시합니다. 더 많은 데이터를 수신한 경우 나중에 커서가 있던 위치에서 커서 를 사용하여 재개할 수 있습니다. 다른 잠재 커서 와 마찬가지로 커서 는 참조하는 최종 객체 가 삭제된 예시 등 특정 점 에서 유효하지 않게 될 수 있습니다(CursorNotFound).

  • 2 은(는) SlaveOk에 해당합니다. 복제본 슬레이브의 쿼리 를 허용합니다. 일반적으로 네임스페이스 'local'을 제외하고는 오류를 반환합니다.

  • 3 은(는) OplogReplay에 해당합니다. oplog의 적합한 쿼리에 대해 최적화가 자동으로 수행되므로 이 플래그를 지정할 필요가 없습니다. 자세한 내용은 oplogReplay 를 참조하세요.

  • 4 은(는) NoCursorTimeout에 해당합니다. 서버 는 일반적으로 과도한 메모리 사용을 방지하기 위해 비활성 기간(10 분) 후에 유휴 커서의 시간을 초과합니다. 이를 방지하려면 이 옵션을 설정합니다.

  • 5 은 AwaitData에 해당합니다. TailableCursor와 함께 사용합니다. 커서 가 데이터 끝에 있으면 데이터를 반환하지 않는 대신 잠시 차단 합니다. 시간 초과 기간이 지나면 서버 가 정상적으로 돌아옵니다.

  • 6 은 배기에 해당합니다. 클라이언트 가 쿼리된 모든 데이터를 완전히 읽는다는 가정 하에 여러 개의 "more" 패키지로 데이터를 완전히 스트리밍합니다. 많은 양의 데이터를 가져와서 모두 내리고 싶을 때 더 빠르게 작업할 수 있습니다. 참고: 클라이언트 는 연결을 닫지 않는 한 모든 데이터를 읽지 않도록 허용되지 않습니다.

  • 7 은 부분에 해당합니다. 일부 샤드가 다운된 경우 mongos 에서 부분적인 결과를 얻습니다(오류를 발생시키는 대신).

  • 8-31 사용 대상이 정해져 있습니다. 0으로 설정해야 합니다.

fullCollectionName

전체 컬렉션 이름, 특히 네임스페이스입니다. 네임스페이스는 연결에 .를 사용하여 데이터베이스 이름과 컬렉션 이름을 연결한 것입니다. 예를 들어, 데이터베이스 test 및 컬렉션 contacts의 경우 전체 컬렉션 이름은 test.contacts입니다.

numberToSkip

쿼리 결과를 반환할 때 결과 데이터세트의 첫 번째 문서부터 생략할 문서 수를 설정합니다.

numberToReturn

쿼리 에 대한 첫 번째 OP_REPLY 메시지의 문서 수를 제한합니다. 그러나 결과가 numberToReturn보다 많은 경우 데이터베이스 여전히 커서 설정하고 cursorID 를 클라이언트 에 반환합니다. 클라이언트 운전자 SQL LIMIT 키워드와 같은 '제한' 기능을 제공하는 경우 호출 애플리케이션 에 지정된 수보다 많은 문서 반환되지 않도록 하는 것은 클라이언트 운전자 의 몫입니다.

numberToReturn인 경우:

  • 0, 데이터베이스 는 기본값 반환 크기를 사용합니다.

  • 음수이면 데이터베이스에서 해당 숫자를 반환하고 커서를 닫습니다. 해당 쿼리에 대한 더 이상의 결과를 가져올 수 없습니다.

  • 1, 서버는 이 값을 -1(으)로 취급합니다(커서가 자동으로 닫힘).

query

쿼리를 나타내는 BSON 문서입니다. 쿼리에는 하나 이상의 요소가 포함되며, 결과 세트에 문서를 포함하려면 모든 요소가 일치해야 합니다. 가능한 요소에는 $query, $orderby, $hint$explain이 있습니다.

returnFieldsSelector

선택 사항입니다. 반환된 문서의 필드를 제한하는 BSON 문서입니다. returnFieldsSelector에는 하나 이상의 요소가 포함되며, 각 요소는 반환되어야 하는 필드 이름이고 정수 값 1입니다. JSON 표기법에서는 a, bc 필드로 제한하는 returnFieldsSelector가 다음이 됩니다.

{ a : 1, b : 1, c : 1}

데이터베이스는 OP_QUERY 메시지에 OP_REPLY 메시지로 응답합니다.

참고

MongoDB 5.1에서는 OP_QUERY 찾기 작업과 OP_QUERY 명령에 대한 지원이 제거됩니다. 예외적으로 OP_QUERY 는 연결 핸드셰이크의 일부로 helloisMaster 명령을 실행하는 데 계속 지원됩니다.

OP_REPLY 메시지는 OP_QUERY 또는 OP_GET_MORE 메시지에 대한 응답으로 데이터베이스에서 전송됩니다. OP_REPLY 메시지의 형식은 다음과 같습니다.

struct {
MsgHeader header; // standard message header
int32 responseFlags; // bit values - see details below
int64 cursorID; // cursor ID if client needs to do get more's
int32 startingFrom; // where in the cursor this reply is starting
int32 numberReturned; // number of documents in the reply
document* documents; // documents
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

responseFlags

연산에 대한 비트 값입니다. 비트 값은 다음에 해당합니다.

  • 0은(는) CursorNotFound에 해당합니다. getMore이(가) 호출되었지만 서버에서 커서 ID가 유효하지 않은 경우 설정됩니다. 결과가 0으로 반환됩니다.

  • 1 은 QueryFailure에 해당합니다. 쿼리 실패 시 설정하다 됩니다. 결과는 실패를 설명하는 "$err" 필드 가 포함된 하나의 문서 로 구성됩니다.

  • 2은(는) ShardConfigStale에 해당합니다. 드라이버는 이를 무시해야 합니다. mongos만 이 세트를 볼 수 있으며, 이 경우 서버에서 구성을 업데이트해야 합니다.

  • 3 은 AwaitCapable에 해당합니다. 서버 가 AwaitData 쿼리 옵션을 지원할 때 설정하다 됩니다. 그렇지 않은 경우 클라이언트 는 테일 커서(tailable 커서)의 getMore 사이에 잠시 쉬어야 합니다.

  • 4-31 사용 대상이 정해져 있습니다. 무시합니다.

cursorID

이 OP_REPLY가 속한 cursorID 입니다. 쿼리 결과 설정하다 하나의 OP_REPLY 메시지에 맞는 이벤트 cursorID 은 0가 됩니다. 이 는 cursorID 추가 데이터를 가져오는 데 사용되는 모든 OP_GET_MORE 메시지에 사용해야 하며, 더 이상 필요하지 않은 경우 클라이언트 가 OP_KILL_CURSORS 메시지를 통해 닫아야 합니다.

startingFrom

커서의 시작 위치입니다.

numberReturned

회신에 포함된 문서 수입니다.

documents

반환된 문서입니다.

OP_UPDATE 메시지는 컬렉션의 문서를 업데이트하는 데 사용됩니다. OP_UPDATE 메시지의 형식은 다음과 같습니다.

struct OP_UPDATE {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values. see below
document selector; // the query to select the document
document update; // specification of the update to perform
}
필드
설명

header

메시지 헤더입니다. 표준 메시지 헤더를 참조하세요.

ZERO

정수 값 0. 향후 사용 목적.

fullCollectionName

전체 컬렉션 이름, 특히 네임스페이스입니다. 네임스페이스는 연결에 .를 사용하여 데이터베이스 이름과 컬렉션 이름을 연결한 것입니다. 예를 들어, 데이터베이스 test 및 컬렉션 contacts의 경우 전체 컬렉션 이름은 test.contacts입니다.

flags

연산에 대한 비트 값입니다. 비트 값은 다음에 해당합니다.

  • 0 은(는) 업서트에 해당합니다. 설정하다 경우 데이터베이스 는 일치하는 문서 를 찾을 수 없는 경우 제공된 객체 를 컬렉션 에 삽입합니다.

  • 1 은 MultiUpdate에 해당합니다. 설정하다 경우 데이터베이스 는 컬렉션 에서 일치하는 모든 객체를 업데이트 합니다. 그렇지 않으면 일치하는 첫 번째 문서 만 업데이트합니다.

  • 2-31 사용 대상이 정해져 있습니다. 0으로 설정해야 합니다.

selector

업데이트할 문서를 선택하기 위한 쿼리를 지정하는 BSON 문서입니다.

update

수행해야 할 업데이트를 지정하는 BSON 문서입니다. 업데이트 지정에 대한 자세한 내용은 업데이트 작업 문서를 참조하세요.

OP_UPDATE 메시지에 대한 응답이 없습니다.