Я думаю, что вы правы, что проверка первого и последнего символов - это, скорее всего, кавычки. Однако сам мангуст не может этого сделать. Я предлагаю заранее подготовить запрос, а также выбрать подходящий метод 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`
});
Если это точный срок, я не должен удалять цитаты перед поиском? Что делает функция regexp? –
Действительно, он должен. Я отредактировал ответ, чтобы удалить кавычки из этого слова перед выполнением запроса, когда это необходимо. Оператор '$ regex' выполняет заданное регулярное выражение в отношении свойства« keyword »каждого документа в коллекции. В этом случае он возвращает true, если ключевое слово содержит термин «term». 'RegExp' позволяет нам динамически строить регулярное выражение во время выполнения. – sdgluck
Спасибо! Не знал, что для соответствия любомуKeywordAnything необходимо регулярное выражение. Как работает это регулярное выражение? Я просто вижу, что вы создаете его и снабжаете термин флагом, нечувствительным к регистру или пустой строкой? –