2012-06-27 5 views
4

내 문제는 : 사용자 모음입니다. 찾으려고하는 사용자가 _id=xxx이고 사용자가 somevalue > 5입니다.몽고 블록 수 대 findone

find(...).count() > 0 또는 findOne(...) != null을 사용하면 더 빠를 것입니다. 아니면 좀 더 빠르고 더 좋은 방법이 있을까요?

+0

테스트를 받으셨습니까? 'explain'은 이런 이유로 존재합니다. – jdi

+0

나는 아직도 더 좋은 해결책이 있는지 모르겠다. :) – Bugari

답변

3

쿼리 시간의 차이는 고유 _id의 경계를 모두 제한하므로 거의 무시할 수 있어야합니다. 즉, 즉시 찾을 수 있습니다. db가 전체 문서 대신 int를 반환하기 때문에 여기서는 약간의 가장자리 만 count으로 이동합니다. 따라서 저장하는 시간은 순수하게 db에서 클라이언트로 데이터를 전송하기 때문입니다.

말했다되는 것을 목표는 쿼리를 존재하고 당신이 찾는 반면에, 문서를 고정하지 않습니다() 수를 사용하여 count

1

를 사용하여 데이터에 대한 상관 없어 할 경우()를 캐시에 저장하여 메모리를 절약합니다. 메모리는 빠른 디스크 외에 mongodb 또는 다른 DB를 사용할 때 가장 귀중한 리소스입니다.

+0

글쎄,이 스레드가 6 개월 된 것을 제외하고, 당신이 말한 것은 정말로 합법적 인 것 같다. 감사합니다 :) – Bugari

+0

오래된 스레드에 대한 회신을 위해 부름. 내 테스트에서 * count() *는 문서를 메모리에 저장합니다. 첫 번째 count() 쿼리가 500ms보다 오래 걸리므로이를 확인할 수 있습니다. 동일한 쿼리를 다시 수행하면 <100ms가됩니다. –

관련 문제