Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

에서 커서 반복 mongosh

이 튜토리얼에서는 커서에 있는 문서에 액세스 방법을 보여줍니다.

커서를 수동으로 반복하거나 toArray() 메서드를 사용하여 커서의 문서에 액세스할 수 있습니다.

이 튜토리얼에서는 다음 내용을 간략하게 설명합니다.

  • let 키워드를 사용하여 커서를 변수로 저장합니다.

  • next(), hasNext()forEach() 메서드를 사용하여 커서에 있는 문서에 액세스.

  • toArray() 메서드를 사용하여 커서 문서를 배열로 반환하고 액세스.

  • mongosh를 설치합니다.

  • 배포에 연결합니다.

기본값 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 번 [1] 반복하고 일치하는 문서를 인쇄할 수 있습니다.

myCursor
[
{
_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 키워드를 사용하여 변수에 할당되지 않으면 커서는 자동으로 배치 크기 [1]까지 반복되어 첫 번째 배치의 결과를 출력합니다.

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()
true

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'
}
[1](1, 2) config를 사용할 수 있습니다. ("displayBatchSize") 설정하다 문서 수를 기본값 인 20에서 변경합니다.

돌아가기

Cursors

이 페이지의 내용