2011-09-28 4 views
1

mongodb doc의 존재를 확인하는 가장 빠른 방법은 무엇입니까?mongodb doc의 존재를 확인하는 가장 빠른 방법은 무엇입니까?

find를 사용해야하고 아무 것도 반환하지 않을까요?

편집 : 당신은 단지 하나의 문서에 대해 테스트하는 경우

collection.findOne {#attribute}, (err, doc) -> 

    if err then console.log err 

    if interaction 
     #exists 
    else 
     #does not 
+0

문서에 대해 알고 계십니까? (db.collectiond.find ({ "_"index ":"value "})))? 아니면 컬렉션 ('db.collection.findOne()','db.collection.count()')에 하나 이상의 문서가 있는지 알고 싶습니까? – markdsievers

+0

예 해당 문서에 대한 정보를 알고 있습니다. – boom

+0

나는 문서의 존재를 단지 질의하는 더 명백한 방법이 없다는 것에 놀랐다; 나는 같은 질문을했다. 의사가 수집에 포함되어 있는지 확인하는 것이 많이 발생해야하며 의사를 물어 보는 것은 이상한 일입니다. 그리고 가장 작은 분야가 무엇이든간에. – Profane

답변

3

, findOne (또는 드라이버에 해당)를 사용; 대부분의 드라이버는 가장 효율적인 방법으로이를 구현합니다 (요청에 음수 한도를 1로 설정하면 더 많은 일치가 있어도 mongo가 하나의 문서를 찾은 직후에 돌아오고, 커서는 생성되지 않습니다) 클라이언트가 사용).

쿼리를 제공 할 수있는 인덱스가있는 경우 field selection을 사용하여 인덱스 필드를 선택할 수 있습니다. 이것은 Mongo의 "covered index"기능을 사용하여 기본 콜렉션 데이터를 검색하지 않게합니다. 색인에 _id이 없으면 필드 선택기에 {_id: 0}을 설정해야합니다.

+0

내 편집 모습을 추천하는 것처럼 보이십니까? – boom

0

원하는 색인이 원하는 색인입니다. 문서에 대해 알고있는 정보가 색인 된 경우이 기능을 사용하여 색인에서 정보 만 검색하고 검색 할 수 있으며 (RAM에 있음) 디스크로 이동하여 참조 문서를 가져올 수 없습니다. Explained in the mongo docs here.

0

http://www.mongodb.org/display/DOCS/mongo%20wire%20protocol#MongoWireProtocol-OPQUERY

numberToReturn는 : 쿼리에 OP_REPLY 메시지 : 첫 번째의 contrib 문서의 수를 제한합니다. 그러나 numberToReturn보다 많은 결과가 있으면 데이터베이스는 여전히 커서를 설정하고 cursorID를 클라이언트에 반환합니다. 클라이언트 드라이버가 SQL LIMIT 키워드와 같은 '제한'기능을 제공하는 경우 클라이언트 드라이버는 지정한 응용 프로그램의 개수 이상을 호출 응용 프로그램에 반환하지 않습니다. numberToReturn이 0이면 db는 기본 반환 크기를 사용합니다. 숫자가 음수이면 데이터베이스는 해당 숫자를 리턴하고 커서를 닫습니다. 해당 쿼리에 대한 더 많은 결과를 가져올 수 없습니다. numberToReturn이 1이면 서버는 -1을 처리합니다 (자동으로 커서를 닫음).

관련 문제