2012-12-27 1 views
0

Java로 Mongo DB를 사용하고 있습니다.Mongo DB Cursor에서 정보 얻기

아래 그림과 같이 Mongo DB에 주어진 String이있는 Symbol이 있는지 확인하려고합니다. 이 작업은 가능하지만 문제는 MOngo DB를 두 번 호출하는 것이므로 매우 비쌉니다 . 하나의 호출로 줄이고 더 많은 성능 지향적으로 만들 수있는 방법이 있습니까?

이 내 코드

public class Test 
{ 
    public static void main(String args[]) 
    { 
     DBCursor cursor = null; 
     DBCollection coll = null; 
     BasicDBObject query = new BasicDBObject(); 
     String symbol = args[0]; 
     query.put("symbol", "" + symbol); 
     cursor = coll.find(query); 
     int count = coll.find(query).count(); 

     /* Here is want to avoid the count call , is there anyway by which 
      the cursor the obtained cursor tells , that there exists the symbol 
      in Mongo DB */ 

     if(count>=1) 
     { 
      // If found then do 
      if (cursor != null) { 

      } 
     } 
     else 
     { 
      // If Not found then do 
     } 
    } 
} 

답변

2

을 왜 count에서 모두 사용하고있다? hasNext() 메서드를 DBCursor으로 사용하면 가져온 것이 있는지 테스트 할 수 있습니다. 당신이 count() 방법을 사용하려는 경우


cursor = coll.find(query); 

if (cursor.hasNext()) { 
    // Found 
    System.out.println(cursor.next()); 
} else { 
    // Not found 
} 

그러나, 다음도 새 쿼리를 해고 할 필요가 없습니다. db.collection.find()부터 DBCursor 만 반환합니다. 따라서 사용중인 count 메서드가 반환 된 DBCursor에 있습니다. 당신이있는 경우 다음의 요소를 가져 원하는 경우, 첫 번째 방법을 사용한다

cursor = coll.find(query); 
int count = cursor.count(); 

if (count >= 1) { 
    // Found 
    System.out.println(cursor.next()); 
} else { 
    // Not found 
} 

을하지만, - : 그래서, 그냥 같은 cursor 기준에 count()를 호출합니다.

+0

감사 Rohit, 당신은) (즉 cursor.count 말을 의미하는 단계; 다른 데이터베이스 호출을하지 않겠습니까 ?? 내가 맞습니까? – Pawan

+0

@PreethiJain .. 네, 맞습니다. 다른 전화를하지 않습니다. Cursor는 JDBC의 ResultSet과 같습니다. 커서를 앞으로 이동하여 각 레코드에 액세스 할 수 있으므로 쿼리에서 반환 된 전체 결과가 고갈됩니다. –

+0

고마워요. – Pawan

2

카운트를 얻기 위해 명시 적으로 전화를 걸 필요가 없습니다.

cursor.hasNext()은 커서에 요소가 있는지 여부를 반환합니다.

cursor = coll.find(query); 
    while(cursor.hasNext()){ 
    // found 
    }else{ 
    // not found 
    } 

당신은 또한 다음과 같은 프로토 타입에서와 같이 일치하는 문서의 수를 반환하는 발견() 쿼리에 count() 방법을 추가 cursor.count()

The count() method counts the number of documents referenced by a cursor. 

사용할 수 있습니다

db.collection.find().count() 
    or 
db.collection.count() 

이 작업은 실제로 find();을 대신 수행하지 않으며 연산은에 의해 반환 될 결과를 계산합니다..

Reference