2015-08-17 2 views
0

Я хочу, чтобы мои пользователи искали точное ключевое слово, например, пользователю дается указание заключить ключевое слово с кавычками типа «Apple», будет искать только точное ключевое слово Apple,, а без кавычек будет искатьMongooseJS/MongoDB поиск точной фразы

*Apple* 

Как я могу написать эти запросы в MongooseJS? Полагаю, я должен искать цитаты в начале и конце строки?

ответ

0

Я думаю, что вы правы, что проверка первого и последнего символов - это, скорее всего, кавычки. Однако сам мангуст не может этого сделать. Я предлагаю заранее подготовить запрос, а также выбрать подходящий метод find.

Мы также можем использовать оператор $regex для выполнения данного регулярного выражения в отношении свойства «keyword» каждого документа в коллекции.

var userInput = '"Apple"'; 
var term = userInput.trim(); 
var caseInsensitive = true; // = some user input? 

var isExactTerm = (function() { 
    var firstChar = term[0]; 
    var lastChar = term[term.length - 1]; 
    return (firstChar === '"' && lastChar === '"'); 
}(); 

if(isExactTerm) { 
    // Remove quotes from the query 
    term = term.substr(1, str.length - 1); 
} 

var method = (isExactTerm) ? 'findOne': 'find'; 
var regexFlags = (caseInsensitive) ? 'i' : ''; 
var query = (isExactTerm) ? term : {$regex: new RegExp(term, regexFlags)}; 

Model[method]({ 
    keyword: query 
}).exec().then(function(result) { 
    // do stuff with `result` 
}, function(err) { 
    // handle `err` 
}); 
+0

Если это точный срок, я не должен удалять цитаты перед поиском? Что делает функция regexp? –

+0

Действительно, он должен. Я отредактировал ответ, чтобы удалить кавычки из этого слова перед выполнением запроса, когда это необходимо. Оператор '$ regex' выполняет заданное регулярное выражение в отношении свойства« keyword »каждого документа в коллекции. В этом случае он возвращает true, если ключевое слово содержит термин «term». 'RegExp' позволяет нам динамически строить регулярное выражение во время выполнения. – sdgluck

+0

Спасибо! Не знал, что для соответствия любомуKeywordAnything необходимо регулярное выражение. Как работает это регулярное выражение? Я просто вижу, что вы создаете его и снабжаете термин флагом, нечувствительным к регистру или пустой строкой? –