문서 메뉴
문서 홈
/
MongoDB Shell
/

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

이 페이지의 내용

  • 사용되지 않는 메서드
  • 읽기 기본 설정 동작
  • 쓰기 기본 설정 동작
  • 객체 ID 메서드 및 특성
  • 숫자 값
  • 객체 인용 동작
  • 데이터베이스 호출 제한

This page describes differences between mongosh and the legacy mongo shell. In addition to the alternatives listed here, you can use the mongocompat snippet to access to legacy mongo shell APIs. Snippets are an experimental feature, for more information, see Snippets.

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 셸을 사용하여 세컨더리 복제본 세트 멤버에 직접 연결하는 경우 mongo.setReadPref() 를 실행하여 세컨더리 읽기를 활성화해야 합니다.

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

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

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

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

  • show dbs

  • show databases

  • show collections

  • show tables

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

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

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

메서드 또는 속성
mongo 행동
mongosh 행동
ObjectId.str
16진수 문자열을 반환합니다.
6419ccfce40afaf9317567b7
정의되지 않음
(사용 불가)
ObjectId.valueOf()
ObjectId.str 값을 반환합니다.
6419ccfce40afaf9317567b7
형식이 지정된 문자열을 반환합니다.
ObjectId("6419ccfce40afaf9317567b7")
ObjectId.toString()
형식이 지정된 문자열을 반환합니다.
ObjectId("6419ccfce40afaf9317567b7")
16진수 형식의 문자열을 반환합니다.
6419ccfce40afaf9317567b7

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

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

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

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

경고

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

다음도 참조하세요.

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

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 });
}
}
← 참조