문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

레거시 옵코드

이 페이지의 내용

  • OP_DELETE
  • OP_GET_MORE
  • OP_INSERT
  • OP_KILL_CURSORS
  • OP_QUERY
  • OP_REPLY
  • OP_UPDATE

이 페이지에서는 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 메시지의 문서 수를 제한합니다. 하지만 결과가 cursorID보다 많은 경우 데이터베이스는 여전히 커서를 설정하고 numberToReturn을 클라이언트에 반환합니다. 클라이언트 드라이버가 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 Exhaust에 해당합니다. 클라이언트가 쿼리된 모든 데이터를 완전히 읽는다는 가정 하에 여러 개의 "more" 패키지로 데이터를 완전히 스트리밍합니다. 많은 양의 데이터를 가져와서 모두 내리고 싶을 때 더 빠르게 작업할 수 있습니다. 참고: 클라이언트는 연결을 닫지 않는 한 모든 데이터를 읽지 않도록 허용되지 않습니다.

  • 7 Partial에 해당합니다. 일부 샤드가 다운된 경우 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 cursor의 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 Upsert에 해당합니다. 설정하면 일치하는 문서를 찾을 수 없는 경우 데이터베이스에서 제공된 객체를 컬렉션에 삽입합니다.

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

  • 2-31은 예약되어 있습니다. 0으로 설정해야 합니다.

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

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

← MongoDB 유선 프로토콜