MongooseJS / MongoDB搜索确切的短语

时间:2015-08-17 20:03:30

标签: javascript node.js mongodb mongoose

我想让我的用户搜索确切的关键字,例如,用户被指示用#34; Apple"等引号括起关键字。只搜索确切的关键字 Apple ,而没有引号则会搜索

*Apple*

如何在MongooseJS中编写这些查询?我想我应该在字符串的开头和结尾寻找引号?

1 个答案:

答案 0 :(得分:0)

我认为你是对的,检查第一个和最后一个字符是引号可能是最简单的。然而猫鼬本身不能做到这一点。我建议事先准备好查询,并选择适当的 find 方法。

我们还可以使用$regex运算符对'关键字'执行给定的正则表达式。集合中每个文档的属性。

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`
});