2011-11-21 2 views
30

나는 MongoDB를 요청/초를 많이 취급하지만, 이제 내가 그들의 _id 주어진 컬렉션의 많은 문서를 조회 할 수 있다고 가정 해 봅시다 할 수 있습니다 알고 더 나은 소리 : 원하는 모든 ID를 가진 _id 특성을 $로 만들거나 findOne 쿼리를 반복합니다.

답변

32

확실히 $를 쿼리에 사용하고 _ids 배열을 제공합니다.

예 :

db.collection.find({ 
    "key": { 
     "$in": [ 
      ObjectId("xxx"), 
      ObjectId("yyy"), 
      ObjectId("zzz") 
     ] 
    } 
}) 

이유는 무엇입니까?

  • 루프를 만들면 오버 헤드를 발생시키는 커서 생성 및 종료 커서마다 일정량의 설정 및 해체가 있습니다.
  • 로컬 컴퓨터에서이 작업을 수행하지 않는 경우 모든 요청에 ​​대해 tcp/ip 오버 헤드가 생성됩니다. 로컬에서는 도메인 소켓을 사용할 수 있습니다. "_id"에 인덱스 기본적으로 생성하고 매우 빠른 작은 쿼리로 이것을 깰 필요가 없도록해야한다 일괄 요청에서 반환 된 문서의 그룹을 수집이있다
  • .

체크 아웃하려면 추가 서류 here이 필요합니다.

+8

$에 100 개 또는 1,000 개라는 항목이 많이 있다면 어떻게 될까요? – ewindsor

+0

@windsor 1000까지는 대개 괜찮습니다. 그 후에는 내가 가지고있는 스키마를 재고하고 데이터를 사전 계산하기 시작합니다. –

+1

JSON 객체 배열에 '$ in'을 사용할 수 있습니까? –