스크립트 고려사항
이 페이지의 내용
데이터베이스 쿼리 결과는 다음 컨텍스트 내에서 전달될 수 없습니다.
클래스 생성자 함수
비동기 제너레이터 함수
배열의
.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 }); } }