问题描述
我想实现搜索我的页面。 所以从frontEnd我得到了用户输入的搜索值,我需要在我的数据库中搜索3行限制。 所以我需要像这样的SQL查询:SELECT * FROM PRODUCTS p WHERE p.title like'%user_value%'或p.sku like'%user_value%'
我尝试这样做:
router.get('/search', function(req, res, next) {
var value = req.query.val;
var query = Product.find({"title": new RegExp('/' + value+'/')}).limit(3);
query.exec(function(err, products) {
if (!err) {
// Method to construct the json result set
var result = JSON.stringify(products);
log.info(products);
res.send(result, {
'Content-Type': 'application/json'
}, 200);
} else {
res.send(JSON.stringify(err), {
'Content-Type': 'application/json'
}, 404);
}
});
但我总是得到空洞的结果。 在我看来,RegExp路径无效。
UPDATE1: 'like'运算符固定如下:
Product.find({"title": new RegExp(".*" + value + ".*")}).limit(3);
但"or p.sku like '%user_value%'"
问题仍然占据一席之地
1楼
Avinash Raj
3
已采纳
2015-07-25 17:00:41
您需要在RegExp
构造函数中将修饰符作为第二个参数传递。
var query = Product.find({"title": new RegExp(".*" + value.replace(/(\W)/g, "\\$1") + ".*", "i")}).limit(3);
例:
> var value = 'SNR-SFP+W73-60'
> console.log(new RegExp(".*" + value.replace(/(\W)/g, "\\$1") + ".*", "i"))
/.*SNR\-SFP\+W73\-60.*/i
2楼
havish
0
2015-07-25 17:00:14
在您的RegExp对象中,您应该这样做:
new RegExp(value)
而不是这个:
new RegExp('/' + value + '/')
请参阅此链接: