【问题标题】:Mongodb nodeJS driver regular expression for any letter任何字母的Mongodb nodeJS驱动正则表达式
【发布时间】:2017-09-26 09:58:53
【问题描述】:

如果我这样做,我有一个非常简单的 9 个文档集合: db.products.find({"Description": /.*m.*/}).count()

它返回 3。

在 node.js 我有这个: db.collection("products").find({Description: new RegExp(`/.*${request.query.name}.*/`)});

它的行为与我完全一样: db.collection("products").find({Description: new RegExp(request.query.name})});

我的意思是。我必须写一个完整的词才能得到结果。我应该注意我在描述字段中有一个 $text 索引,它是集合中唯一的 $text 索引。

检索速度非常快,但是......因为我在自动完成中使用它,所以我希望能够只写一个字母来开始获得结果。我投影字段,所以返回的数据不会太大。它适用于 mongo 控制台,但我似乎遗漏了 Regex 在 Javascript 中的工作方式。

非常感谢。

编辑 关注:MongoDB Regular Expression Search - Starts with using javascript driver and NodeJS 我试过了: db.collection("products").find({Description: {'$regex': request.query.name}});

无济于事。我仍然需要输入一个完整的单词。我坚持认为,在 mongo shell 中使用带有包含字母的正则表达式。

我真的迷路了。任何帮助将非常感激。

【问题讨论】:

    标签: node.js regex mongodb


    【解决方案1】:

    我认为你必须在这里使用 $options 属性。像这样:

    db.collection("products").find({ Description: { '$regex': request.query.name, $options: 'is' }
    });
    

    - 不区分大小写。

    s - 将允许点字符匹配所有字符和换行符。

    您可以查看更多此MongoDB $regex

    我希望这会有所帮助。

    【讨论】:

    • 对我不起作用 :(。如果我这样做 products = db.collection("products").find({Description: {'$regex':/.*m.*/, $ options: 'is'}}); 有效。但不能真正让它与变量一起工作。我是否盲目地认为我在这里遗漏了一些东西并且仍然看不到它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多