Docs Menu
Docs Home
/
MongoDB Shell
/

레거시 셸 와의 호환성 변경 사항 mongo shell

이 페이지의 내용

  • 사용되지 않는 메서드
  • 읽기 기본 설정 동작
  • 쓰기 기본 설정 동작
  • ObjectId 메서드 및 특성
  • Numeric Values
  • 정의되지 않은 값
  • 객체 인용 동작
  • 데이터베이스 호출 제한
  • 명령 예외
  • shell 구성
  • 데이터 유형
  • 방법
  • 재시도 가능한 쓰기
  • 레거시 출력
  • 코드 스니펫

이 페이지에서는 mongosh 와 레거시 mongo shell 간의 차이점에 대해 설명합니다. 여기에 나열된 대안 외에도 mongocompat 을 사용할 수 있습니다. 스니펫을 액세스 하여 mongo shell 레거시 API에 액세스할 수 있습니다. 스니펫은 실험적인 기능 으로, 자세한 내용은 스니펫을 참조하세요.

snippet install mongocompat

다음 셸 메서드는 mongosh에서 더 이상 사용되지 않습니다. 대신 Alternative Resources 열에 나열된 메서드를 사용합니다.

사용되지 않는 메서드
대체 리소스
db.collection.copyTo()
집계 단계: $out
db.collection.count()
db.collection.insert()
db.collection.remove()
db.collection.save()
db.collection.update()
DBQuery.shellBatchSize
Mongo.getSecondaryOk
Mongo.isCausalConsistency
Mongo.setSecondaryOk
rs.secondaryOk
더 이상 필요하지 않습니다. 세컨더리 노드에서 읽기 작업을 참조하세요.

레거시 mongo shell 을 사용하여 세컨더리 복제본 세트 멤버에 직접 연결하는 경우 mongo.setReadPref() 를 실행 하여 세컨더리 읽기를 활성화 해야 합니다.

mongosh를 사용하여 세컨더리 복제본 세트 멤버에 직접 연결할 때 읽기 설정을 지정하면 해당 멤버에서 읽을 수 있습니다.

읽기 설정을 지정하려는 경우 다음 중 하나를 사용할 수 있습니다.

mongosh 를 사용하여 세컨더리 복제본 세트 멤버에 직접 연결할 때 읽기 설정 (read preference) 설정하다 이 primaryPreferred, secondary 또는 secondaryPreferred 로 설정되어 있으면 rs.secondaryOk() 를 실행 필요가 없습니다 .

다음 show 도우미 메서드는 작업에 대해 다른 읽기 기본 설정이 지정되어 있는 경우에도 항상 primaryPreferred의 읽기 기본 설정을 사용합니다.

  • show dbs

  • show databases

  • show collections

  • show tables

레거시 mongo 셸에서 이러한 작업은 읽기 설정을 사용합니다.

재시도 가능 쓰기mongosh에서 활성화되도록 기본 설정되어 있습니다. 재시도 가능 쓰기는 레거시 mongo shell에서 비활성화되도록 기본 설정되어 있습니다. 재시도 가능 쓰기를 비활성화하려면 --retryWrites=false를 사용하세요.

이러한 ObjectId() 메서드는 mongosh 에서 레거시 mongo shell 과 다르게 작동합니다.

메서드 또는 속성
mongo 행동
mongosh 행동
ObjectId.str
Returns a hexadecimal string:
6419ccfce40afaf9317567b7
Undefined
(Not available)
ObjectId.valueOf()
Returns the value of ObjectId.str:
6419ccfce40afaf9317567b7
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
ObjectId.toString()
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
Returns a hexadecimal formatted string:
6419ccfce40afaf9317567b7

레거시 mongo 셸은 기본적으로 숫자 값을 doubles로 저장했습니다. mongosh에서 숫자는 32비트 정수인 Int32으로 저장되며, 값을 Int32로 저장할 수 없는 경우에는 Double로 저장됩니다.

MongoDB Shell 은 mongo shell 에서 지원되는 숫자 유형을 계속 지원 합니다. 그러나 MongoDB 드라이버 와 더 잘 일치하도록 기본 유형이 업데이트되었습니다. 자세한 내용은 mongosh 데이터 유형 을 참조하세요.

숫자 변수의 기본 유형은 MongoDB Shell에서 레거시 mongo 셸에서 제안된 유형과 다릅니다. mongosh의 유형은 MongoDB 드라이버에서 사용하는 유형과 더 잘 일치합니다.

mongo 유형
mongosh 유형
NumberInt
Int32
NumberLong
Long
NumberDecimal
Decimal128

경고

mongosh 및 기존 mongo 셸을 모두 사용하여 동일한 컬렉션에 연결하는 경우 데이터 유형이 일관되지 않게 저장될 수 있습니다.

다음도 참조하세요.

유형 관리에 대한 자세한 내용은 스키마 유효성 검사 개요를 참조하세요.

정의되지 않은 BSON 유형은 이상 사용되지 않습니다. 에 정의되지 않은 JS 유형이 있는 문서 를 삽입하려고 mongosh 하면 배포서버 에서 문서 의 정의되지 않은 값을 BSON null 값으로 대체합니다. 를 사용하여 데이터베이스 에 정의되지 않은 값을 삽입하는 방법은 지원되지 mongosh 않습니다.

예를 예시 mongosh 에 문서 를 삽입하려면 다음 코드를 실행 하는 것이 좋습니다.

db.people.insertOne( { name : "Sally", age : undefined } )

mongosh 에서 이 코드를 실행 하면 셸 이 다음 문서 를 삽입합니다.

{ name : "Sally", age : null }

mongosh 고 (Go) 드라이버 또는 레거시 셸 과 같은 다른 도구를 사용하여 저장된 모든 BSON 정의되지 않은 값을 mongo null로 나타냅니다.

mongosh 출력에서 객체 키를 따옴표로 묶지 않고 값에 작은따옴표를 붙입니다. 키와 문자열 값을 모두 큰따옴표로 묶는 레거시 mongo 셸의 출력을 재현하려면 mongosh --evalEJSON.stringify()와 함께 사용합니다.

예를 들어, 다음 명령은 test 데이터베이스의 sales 컬렉션에 있는 항목을 큰따옴표와 들여쓰기와 함께 반환합니다.

mongosh --eval "EJSON.stringify(db.sales.findOne().toArray(), null, 2)"

출력은 다음과 같이 표시됩니다.

{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
}
}

데이터베이스 쿼리 결과는 다음 컨텍스트 내에서 전달될 수 없습니다.

  • 클래스 생성자 함수

  • 비동기 제너레이터 함수

  • 배열의 .sort()에 대한 콜백

  • 클래스 내 JavaScript 세터

데이터베이스 호출의 결과에 액세스하려면 비동기 함수, 비동기 생성기 함수 또는 .map()을 사용합니다.

다음 생성자는 작동하지 않습니다.

// This code will fail
class FindResults {
constructor() {
this.value = db.students.find();
}
}
// This code will fail
function listEntries() { return db.students.find(); }
class FindResults {
constructor() {
this.value = listEntries();
}
}

대신 async 함수를 사용합니다.

class FindResults {
constructor() {
this.value = ( async() => {
return db.students.find();
} )();
}
}

참고

비동기 JavaScript로 작업하는 대신 클래스 내에서 데이터베이스 작업을 수행하는 메서드를 만들 수도 있습니다.

class FindResults {
constructor() { }
init() { this.value = db.students.find(); }
}

이 클래스를 사용하려면 먼저 클래스 인스턴스를 구성한 다음 .init() 메서드를 호출하세요.

다음 제너레이터 함수는 작동하지 않습니다.

// This code will fail
function* FindResults() {
yield db.students.findOne();
}
// This code will fail
function listEntries() { return db.students.findOne(); }
function* findResults() {
yield listEntries();
}

대신 async generator function을(를) 사용합니다.

function listEntries() { return db.students.findOne(); }
async function* findResults() {
yield listEntries();
}

다음 배열 정렬은 작동하지 않습니다.

// This code will fail
db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => {
return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() )
} );

대신 .map()을(를) 사용합니다.

db.getCollectionNames().map( collectionName => {
return { collectionName, size: db[ collectionName ].estimatedDocumentCount() };
} ).sort( ( collectionOne, collectionTwo ) => {
return collectionOne.size - collectionTwo.size;
} ).map( collection => collection.collectionName);

배열 정렬에 대한 이러한 접근 방식은 지원되지 않는 해당 코드보다 성능이 더 좋은 경우가 많습니다.

다음 JavaScript 세터는 작동하지 않습니다.

// This code will fail
class TestClass {
value = 1;
get property() {
return this.value;
}
// does not work:
set property(value) {
this.value = db.test.findOne({ value });
}
}

출력에 { ok: 0 }이 포함된 명령의 경우 mongosh는 일관된 예외를 반환하고 서버의 원시 출력을 생략합니다. 레거시 mongo 셸은 각 명령에 따라 다른 출력을 반환합니다.

자세한 내용은 명령 실행을 참조하세요.

레거시 mongo shell 은 .mongorc.js이라는 구성 파일 을 사용합니다.

mongosh 이(가) 스타트업 .mongorc.js 을(를) 찾지만 .mongoshrc.js 을(를) 찾지 못한 경우, mongosh 는 레거시 .mongorc.js 파일 을 로드하지 않고 .mongorc.js 의 이름을 .mongoshrc.js 으)로 바꿔야 한다고 명시합니다.

자세한 내용은 .mongoshrc 구성 파일을 참조하세요.

MongoDB는 JSON에서 사용할 수 없는 추가 데이터 유형을 지원하는 BSON을 사용하여 데이터를 저장합니다. mongosh 셸은 기존 mongo 셸보다 드라이버에 대한 데이터 유형 지원이 더 뛰어납니다.

자세한 내용은 데이터 유형을 참조하세요.

레거시 mongo shell 은 load() 메서드에서 스크립트의 파일 이름 또는 디렉토리 에 액세스 할 수 없습니다.

자세한 내용은 load()를 참조하세요.

기본적으로 재시도 가능한 쓰기는 다음과 같습니다.

  • 활성화됨 mongosh

  • 레거시 mongo 셸에서 비활성화됨

재시도 가능 쓰기를 비활성화하려면 --retryWrites=false 를 사용합니다.

자세한 내용은 --retryWrites를 참조하세요.

mongosh shell 은 레거시 mongo shell 과 다른 출력을 반환합니다. 레거시 mongo shell 과 유사한 방식으로 출력 형식을 지정해야 하는 스크립트가 있는 경우 EJSON.stringify()를 사용하여 mongosh 출력의 형식을 다시 지정해 보세요.

자세한 내용은 레거시 tojsononeline() 를 참조하세요.

레거시 mongo shell 에서는 코드 스니펫을 사용하는 작업이 다릅니다.

자세한 내용 은 스니펫에 대한 도움말 얻기를 참조하세요.

돌아가기

참조