【问题标题】:mongoose 'or' and 'like' operators node.jsmongoose 'or' 和 'like' 运算符 node.js
【发布时间】:2015-10-16 04:57:51
【问题描述】:

我想实现对我的页面的搜索。所以从前端我从用户的输入中获得了搜索值,我需要在我的数据库中搜索 3 行限制。 所以我需要这样的sql查询: SELECT * FROM PRODUCTS p WHERE p.title like '%user_value%' or 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 路径无效。

更新1: 'like' 运算符是这样固定的:

Product.find({"title": new RegExp(".*" + value + ".*")}).limit(3);

但是"or p.sku like '%user_value%'"的问题还是占了一席之地

【问题讨论】:

  • 您是否尝试在 RegExp 中包含变量 value?然后var query = Product.find({"title": new RegExp(value)}).limit(3);
  • mm,只是值,但我需要像 %value%?
  • 试试var query = Product.find({"title": new RegExp(".*" + value + ".*")}).limit(3);
  • thx,这行得通,但是我如何添加大小写忽略? ,我应该把'i' attr放在哪里?

标签: javascript regex node.js mongodb


【解决方案1】:

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

new RegExp(value)

而不是这个:

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

参考此链接: RegExp

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我遇到了一些麻烦,然后 value 变量有类似 'SNR-SFP+W73-60' 的文本,它什么也没找到,但必须
    • 有效!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2015-06-21
    • 2022-10-01
    • 2017-08-01
    • 1970-01-01
    • 2013-11-18
    • 2015-07-08
    相关资源
    最近更新 更多