2013-07-10 3 views
0

MongoDB에 많은 레코드가 저장되어 있으며 대개의 경우 제목으로 쓰여 있습니다. 샘플 프로토 타입 :MongoDB를 검색 할 때 대소 문자를 구분하지 않음 - eval()입니까?

내 프론트 엔드에서
{ 
    'name':'Awesome Pair of Jeans', 
    'designer':'Company123', 
    'description':'This pair of jeans is really great. Navy colour.' 
},{ 
    'name':'awesome jeans part 2', 
    'designer':'company123', 
    'description':'This pair of jeans is also navy in colour.' 
} 

(각도/노드 기반) 년은 사용자에게 레코드를 검색 할 수있는 기능을 제공하기를 원하지만 MongoDB의 검색으로 대소 문자를 구분 나는 몇 가지 문제에 봉착한다.

누군가가 "이름"필드에 단어 "최고"(소문자)를 검색하면 현재는 유일한 방법은 내가 awesomeAwesome가 반환됩니다 모두 다음과 같이 쿼리하는 것입니다 보장 할 수있었습니다

:

먼저 쿼리가 정규식으로 묶입니다. "최고"의 사용자 검색, 그것은 name:/awesome/i이 올바른 결과를 반환

exports.postsQuery = function(req,res){ 
    var query = req.params.query; // 'name:/awesome/i' 
    var properties = query.split('+'); 
    var criteria = {}; 
    properties.forEach(function(property) { 
     var propParts = property.split('='); 
     criteria[propParts[0]] = eval(propParts[1]); // criteria{name:/awesome/i}; 
    }); 

    db.products.find(criteria, function (err, record) { 
     // Do stuff 
    }); 
} 

로 쿼리에 전달,하지만 나는 그것이 얼마나 안전 궁금 해요, 만약 그렇다면이 할 수있는 더 좋은 방법이 있다면 .

이 질문과 유사 : Case insensitive search in Mongo 그러나 속도와 보안을위한 모범 사례가 무엇인지 궁금합니다. 대신 /awesome/i 문자열을 구축

답변

1

, 그 아마도 더 나은 당신이 할 수있는 대신

criteria[propParts[0]] = eval(propParts[1])

의 다음 awesome을 통과하는

criteria[propParts[0]] = new RegExp(propParts[1], "i");

같은 RegExp 당신을 반환하는 현재 eval을 사용하지 않고 문자열 조작을 덜 사용하고 있습니다.

+0

위대한 아이디어, 건배! – Jascination

관련 문제