2017-10-17 1 views
0

현재이 코드를 사용하여 문자열을 기반으로 가능한 첫 번째 '슬러그'를 검색합니다. 재귀 적입니다. 가능한 슬러그를 발견했을 때 멈추었습니다.mongodb 컬렉션에서 빨리 검색하는 방법

function determineProductSlug(name, count, callback){ 
    var nameSlug = name; 
    if(count > 0){ 
     nameSlug = name + '-' + count; 
    } 

    Product.find({'en.nameSlug': nameSlug}).sort({_id: -1}).exec(function(err, product){ 
     if(err){ 
      return callback(err); 
     } 
     if(product.length == 0){ 
      return callback(null, nameSlug); 
     }else{ 
      count = count+1; 
      return determineProductSlug(name, count, callback); 
     } 
    }) 
} 

그러나 매우 느립니다. 우리는 이제 컬렉션에 약 10,000 개의 문서를 저장했습니다. 그러나 더 많은 내용이 포함될 것입니다.

이 기능/쿼리가 더 빠르게 작동하도록하려면 어떻게해야합니까? 나는 재치를 sort({id: -1}) 시도했지만 그 도움이되지 않습니다.

+0

그냥'.count()'를 사용하십시오. 실제로는 어떤 문서도 검색하지 않고 단지 커서 카운트를 반환합니다. 실제로 커서 카운트를 반환합니다. 실제로는 실행 및 페치가 아닌 쿼리를 분석 한 것입니다. –

+1

문서는 어떻게 생겼습니까? 그들은 꽤 큰가요? 데이터베이스에 대한 관리자 액세스 권한이 있으며 인덱스를 만들 수 있습니까? –

+0

@ A.P. 그것이 나를 도왔 때문에 대답으로 게시하시기 바랍니다 :) – NVO

답변

1

수행 권한이있는 경우 성능을 향상시키는 한 가지 방법은 en.nameSlug에 색인을 만드는 것입니다. 인덱스는 메모리에 보관 된 이진 트리로 가장 빨리 찾을 수 있습니다. 인덱스는 쓰기 성능을 저하시킬 수 있지만 가장 중요한 것이 읽혀 지거나 쓰는지를 알 수 있습니다.

관련 문제