2012-08-29 10 views
1

몽구스와 전체 텍스트 검색을 두 필드로 섞으려고합니다. 나는 대부분의 쿼리 유형을 테스트하는 데 썼지 만 항상 실패했습니다. MongoDB의 쉘 쿼리이 하나입니다 :이 예에서 몽구스 : 부울 '또는'와일드 카드로 쿼리

db.feeds.item.find({lang:"en", $or:[{title: /searchexpression/}, {body: /searchexpression/}] }) 

내가 제목 또는 필드 또는 두 필드에 (정규식 포함) 검색 식을 일치하는 경우에만 영어 문서를 반환하려면 . 이 쿼리는 작동하지만 문제는 :-(, 내가 말했듯이, 때 몽구스으로 적응하기 위해 노력하고, 내가 사용하고

일부 표현을 시작하셨습니까 't 작업 :

exports.fullTextSearch = function(lang, text, callback) { 
    MyModel.find({lang:lang, $or: [{title:/text/},{body:/text/}]}).exec(callback); 
    MyModel.find({lang:lang, $or: [{title: new RegExp('\/'+text+'\/')}, {body:new RegExp('\/'+text+'\/')}]}).exec(callback); 
    MyModel.find({lang:lang}).or({title:/text/},{body:/text/}).exec(callback); 
    MyModel.find({lang:lang}).or({title:new RegExp('\/'+text+'\/')},{body:new RegExp('\/'+text+'\/')}).exec(callback);  

}

은 대단히 감사합니다!

루이스 CAPPA을.

답변

0

이 테스트를하지만, documentatio에 따라하지 않았 이게 작동해야합니다 :

MyModel.find({lang:lang}).or([{title:/text/},{body:/text/}]).exec(callback); 

"or"조건은 배열에 있지만 세 번째 예는 같습니다.

EDIT :

MyModel.find({lang:lang}).or([{title:new RegExp(text)},{body:new RegExp(text)}]).exec(callback); 

아니면 외부 정규식 정의 :

var regexText = new RegExp(text) 
MyModel.find({lang:lang}).or([{title:regexText},{body:regexText}]).exec(callback); 

가 있지만 배열의 "또는"조건, 정규식 동적가 네번째 예제 사용

+0

나는 previosly 같은 쿼리를 시도했지만 작동하지 않았다. 나는 다시 당신이 제안한 것과 정확히 아무것도 복사하지 않았다 :-(나는 아마 이것이 몽구스 버그라고 생각하기 시작했다. ... – lcappa

+0

RegExp에 행운이 포함되어있는 쿼리를 시도했다. – lcappa

+0

나는 쿼리를 단순화했다. MyModel.find ({lang : lang, title : new RegExp ('\ /'+ text + '\ /')}). exec (콜백); 그것은 몽구스 관련 버그 일 수 있습니다. 정규식 또는 문서화되지 않은 쿼리 구성 요소 포함 – lcappa