이 튜토리얼에서는 커서에 있는 문서에 액세스 방법을 보여줍니다.
커서를 수동으로 반복하거나 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' |
} |