2011-01-11 3 views
2

이 mongoDB C# 드라이버를 사용하여 mongoDB에서 데이터를 쿼리하는 응용 프로그램은 다음과 같습니다.mongoDB로 문서 검색을 일괄 처리하는 방법은 무엇입니까?

public void main() 
{ 
    foreach (int i in listOfKey) 
    { 
     list.add(getObjectfromDB(i); 
    } 
} 

public myObject getObjFromDb(int primaryKey) 
{ 
    document query = new document(); 
    query["primKey"] = primaryKey; 
    document result= mongo["myDatabase"]["myCollection"].findOne(query); 
    return parseObject(result); 
} 

내 로컬 (개발) 컴퓨터에서이 방법으로 100 개 개체를 얻는 데는 1 초도 걸리지 않습니다. 그러나 최근에 데이터베이스를 인터넷상의 서버로 옮겼습니다.이 쿼리는 동일한 수의 개체에 대해 실행하는 데 약 30 초 정도 걸립니다.

또한 mongoDB 로그를 보면이 쿼리를 수행하기 위해 DB에 약 8-10 개의 연결을 여는 것으로 보입니다.

그럼 내가하고 싶은 건 기본 데이터베이스의 배열에 대한 쿼리를 데이터베이스에 저장하고 한 번에 모두 다시 가져온 다음 가능한 한 한 연결을 사용하여 루프에서 구문 분석을 수행하는 것입니다.

이렇게하려면 쿼리를 어떻게 최적화 할 수 있습니까?
고마워,
- 마이클

답변

2

. $ 또는 더 잘 동작 할 것이지만 좀 더 장황하고 최신 버전에서만 지원됩니다 (1.5.4).

2

당신이 찾고있는 것은 당신의 쿼리 문 "$에서"마법 인 것처럼 들린다. 전 C#하지만 JSON에 익숙하지 해요, 당신은 유사한 쿼리를보고 할 것 : 반대() .find 호출 할 때

query = { 
    'primaryKey': { 
     '$in': [ 
     'val1', 
     'val2', 
     'val3' 
     ] 
    } 
} 

위의 커서로 결과의 목록을 반환 무슨 이제 하나의 primaryKey를 제출하고 findOne()을 호출하는 중입니다.

find()는 커서 구조체를 반환하는 findOne()과 반대로 커서 객체를 순환하여 각 문서를 가져와야하는 데이터에 액세스합니다.

희망이 도움이됩니다. 의견에 대해 더 구체적으로 질문하십시오.

MongoDB를 $ 또는 참조 : http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

C#을 발견() 참조 : 당신은에 $를 사용하려면 http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

+0

이것은 $가 아니거나 값이 아닌 기준 (표현식) 배열을 포함하고 있습니다. –

관련 문제