레거시 셸 와의 호환성 변경 사항 mongo
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
를 사용하여 세컨더리 복제본 세트 멤버에 직접 연결할 때 읽기 설정을 지정하면 해당 멤버에서 읽을 수 있습니다.
읽기 설정을 지정하려는 경우 다음 중 하나를 사용할 수 있습니다.
노드 에 연결할 때
readPreference
연결 string 옵션입니다.Mongo.setReadPref()
메서드.
mongosh
를 사용하여 세컨더리 복제본 세트 멤버에 직접 연결할 때 읽기 설정 (read preference) 설정하다 이 primaryPreferred
, secondary
또는 secondaryPreferred
로 설정되어 있으면 rs.secondaryOk()
를 실행 필요가 없습니다 .
show
도우미 메서드
다음 show
도우미 메서드는 작업에 대해 다른 읽기 기본 설정이 지정되어 있는 경우에도 항상 primaryPreferred
의 읽기 기본 설정을 사용합니다.
show dbs
show databases
show collections
show tables
레거시 mongo
셸에서 이러한 작업은 읽기 설정을 사용합니다.
쓰기 기본 설정 동작
재시도 가능 쓰기는 mongosh
에서 활성화되도록 기본 설정되어 있습니다. 재시도 가능 쓰기는 레거시 mongo
shell에서 비활성화되도록 기본 설정되어 있습니다. 재시도 가능 쓰기를 비활성화하려면 --retryWrites=false
를 사용하세요.
ObjectId 메서드 및 특성
이러한 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 |
Numeric Values
레거시 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 --eval
을 EJSON.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 세터
다음 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
셸은 각 명령에 따라 다른 출력을 반환합니다.
자세한 내용은 명령 실행을 참조하세요.
shell 구성
레거시 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 에서는 코드 스니펫을 사용하는 작업이 다릅니다.
자세한 내용 은 스니펫에 대한 도움말 얻기를 참조하세요.