이 튜토리얼에서는 커서에 있는 문서에 액세스 방법을 보여줍니다.
커서를 수동으로 반복하거나 toArray() 메서드를 사용하여 커서의 문서에 액세스할 수 있습니다.
이 튜토리얼에서는 다음 내용을 간략하게 설명합니다.
기본값 test 데이터베이스 사용하여 새 컬렉션에 문서를 삽입하려면 mongosh 를 사용합니다.
| db.users.insertMany( [ |
| { _id: 0, type: "admin", email: "admin@example.com", name: "Admin User" }, |
| { _id: 1, type: "user", email: "user1@example.com", name: "Test User 1" }, |
| { _id: 2, type: "user", email: "user2@example.com", name: "Test User 2" } |
| ] ) |
mongosh에서 커서는 let 키워드를 사용하여 변수에 할당할 때 자동으로 반복되지 않습니다.
| let myCursor = db.users.find( { type: "user" } ) |
셸 에서 커서 변수를 호출하여 최대 20 번 반복하고 일치하는 문서를 인쇄할 수 있습니다.
| [ |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| }, |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
| ] |
반환된 커서가 let 키워드를 사용하여 변수에 할당되지 않으면 커서는 자동으로 배치 크기 까지 반복되어 첫 번째 배치의 결과를 출력합니다.
| db.users.find( { type: "user" } ) |
| [ |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| }, |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
| ] |
커서 메서드 next() 를 사용하여 문서에 액세스 수도 있습니다. next() 는 커서 현재 가리키고 있는 문서 반환한 다음 커서 다음 문서 앞으로 이동합니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| myCursor.next() |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| } |
커서 메서드 hasNext()는 커서에서 반환할 문서가 더 있는지 여부를 나타내기 위해 true 또는 false를 반환합니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| myCursor.hasNext() |
printjson() 헬퍼를 사용하여 커서에서 남아 있는 모든 문서를 출력하려면 hasNext() 및 next() 메서드를 사용할 수 있습니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| while ( myCursor.hasNext() ) { |
| printjson( myCursor.next() ) |
| } |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| } |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
마찬가지로, forEach() 커서 메서드를 사용하여 커서의 각 문서에 printjson()과 같은 헬퍼를 적용할 수 있습니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| myCursor.forEach( myDocument => printjson(myDocument) ) |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| } |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
mongosh 2.1.0부터 for-of 루프를 사용하여 커서를 반복할 수도 있습니다. 다음 예시에서는 이전 예시와 동일한 결과를 반환합니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| for ( let myDocument of myCursor ) { |
| printjson( myDocument ) |
| } |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| } |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
커서 메서드에 대한 자세한 내용은 JavaScript 커서 메서드 및 드라이버 설명서에서 확인 가능합니다.
mongosh에서 toArray() 메서드를 사용하여 커서 반복하고 문서를 배열로 반환합니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| let documentArray = myCursor.toArray() |
|
| documentArray |
| [ |
| { |
| _id: 1, |
| type: 'user', |
| email: 'user1@example.com', |
| name: 'Test User 1' |
| }, |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
| ] |
결과 문서 배열에 전통적인 배열처럼 액세스할 수 있습니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| let documentArray = myCursor.toArray() |
|
| documentArray[1] |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |
toArray() 메서드는 커서가 반환한 모든 문서를 RAM에 불러오고 커서를 소진합니다.
일부 드라이버는 커서의 인덱스를 사용하여 문서에 액세스할 수 있습니다(예: cursor[index]). 이는 toArray() 메서드를 먼저 호출한 후 결과 배열의 인덱스를 사용하기 위한 빠른 방법입니다.
| let myCursor = db.users.find( { type: "user" } ) |
|
| myCursor.toArray() [1] |
| { |
| _id: 2, |
| type: 'user', |
| email: 'user2@example.com', |
| name: 'Test User 2' |
| } |