2012-03-29 2 views
3

mongodb에 대해 읽었습니다. . 커서이 방법을 사용하는 경우쿼리를 사용하여 커서를 반복자로 사용

> var cursor = db.things.find(); 
> printjson(cursor[4]); 
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 } 

"모든 값이 가장 높은 액세스 (커서 [4] 위) 동시에 RAM에로드까지 이것은주의 -이 부분 http://www.mongodb.org/display/DOCS/Tutorial 그것은 말한다 건너 온 메모리를 다 써 버리면 대형 결과 집합에 적합하지 않습니다. 커서는 많은 수의 요소를 반환하는 쿼리와 함께 반복자로 사용해야합니다. " ? 당신이 좋아하는 일을 할 수있는 몽고 콘솔에서

DBCursor cursor = collection.find(query); 
while(cursor.hasNext()) { 
    DBObject obj = cursor.next(); 
    // do something tih obj 
} 

: 쿼리와 반복자로 커서를 사용하는 방법 덕분에이 같은 것을되어야 MongoDB의 자바 드라이버를 사용하여 도움

답변

2

에 대한

:

var cursor = db.things.find(); 
while(cursor.hasNext()) { printjson(cursor.next()); } 
12

당신은 pymongo을 사용하고 있는지 태그를 추가 한, 그래서 반복자로 커서를 사용하여 당신이 pymongo 예제를주지 :

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
for item in cursor: 
    print item 
    #this will print the item as a dictionary 

하고 또한

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
results = [item['some_attribute'] for item in cursor] 
#this will create a list comprehension containing the value of some_attribute 
#for each item in the collection 

, 당신은 배치의 크기를 설정할 수 있습니다이 작업을 수행하여 pymongo 드라이버에 반환

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
cursor.batchsize(20) #sets the size of batches of items the cursor will return to 20 

그것은 엉망 보통 불필요 일괄 처리 크기이지만 쿼리를 결과를 조작하는 동안 드라이버를 실행중인 시스템에 메모리 문제와 페이지 오류가 발생하면 더 나은 성능을 얻기 위해이 값을 설정해야 할 수도 있습니다 rmance (이것은 정말로 나에게는 고통스런 최적화와 같고 나는 항상 디폴트를 떠났다.)

javascript 드라이버 ("셸"을 실행할 때로드되는 드라이버)는 설명서의 일부에서 "어레이 모드"를 사용하지 말 것을 경고합니다. 일부 언어, 자바 스크립트처럼 드라이버가 "배열 모드"를 지원하는 쉘

주에서

분할 모드 : 온라인 매뉴얼에서. 자세한 내용은 드라이버 설명서를 확인하십시오.

db 쉘에서 배열 모드로 커서를 사용하려면 array index [] 작업과 length 속성을 사용하십시오.

배열 모드는 모든 데이터를 최대 색인 인 까지 RAM에로드합니다. 따라서 매우 많은 양의 데이터를 으로 반환 할 수있는 쿼리에는 사용할 수 없습니다. 클라이언트의 메모리가 부족합니다.

커서로 toArray()를 호출 할 수도 있습니다. toArray()는 모든 개체 쿼리를 RAM에로드합니다.

1

MongoDB 결과가 일괄 적으로 반환됩니다.배치에 남아 얼마나 많은 개체를 확인하려면, 우리는이 같은 objLeftInBatch()를 사용


var c = db.Schools.find(); 
var doc = function() {return c.hasNext()? c.next : null;} 
c.objLeftInBatch(); 

이 배치를 반복하기 위해 우리가 doc()를 사용할 수 위의 코드 블록에서 우리는 설정. 커서에 대한 자세한 내용은 https://docs.mongodb.com/

에서 확인할 수 있습니다.