当前位置: 代码迷 >> JavaScript >> mongoose'或'和'like'运算符node.js
  详细解决方案

mongoose'或'和'like'运算符node.js

热度:80   发布时间:2023-06-05 10:17:08.0

我想实现搜索我的页面。 所以从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%'"问题仍然占据一席之地

您需要在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

在您的RegExp对象中,您应该这样做:

new RegExp(value)

而不是这个:

new RegExp('/' + value + '/')

请参阅此链接:

  相关解决方案