MongoDB搜索用户:使用正则表达式基于名称进行过滤

时间:2019-03-05 16:34:50

标签: node.js regex mongodb mongoose

因此,我想在我的Web应用程序中添加一个搜索栏,并在输入元素中输入名称时显示用户。

我通过创建mongodb查询在后端过滤名称,并在$ regex处输入用户在前端输入元素(搜索栏)中输入的字符串。我以为它运行良好,但是现在我的老板说,许多用户输入他们的名字时都没有出现。我经历了整个过程,这与我在MongoDb查询中输入的正则表达式有关。

例如,当我在搜索栏中输入“ jonas”时,我希望这将返回具有full_name属性值Jonas Rodrigo的用户文档。我以为我可以像下面一样简单地输入输入元素字符串,这是我的错吗?如果是这样,我该如何改善呢?

这就是它的样子:当我输入名称Jonas时,我希望该用户显示,但不幸的是他没有出现。

enter image description here

这是我的mongoDB查询功能:我只是在$ regex中输入字符串(在这种情况下为'jonas'),但是我必须做错了什么,因为它没有返回所需的用户(另一个两个条件都是真实的)

const createUserQuery = (user, query) => User.find({
  $and: [
    { full_name: { $regex: query, $options: 'i' } },
    { _workspace: user._workspace },
    { active: true }
  ]
}).select('profile_pic full_name email created_date');

mongodb用户文档示例

enter image description here

2 个答案:

答案 0 :(得分:1)

问题可能出在您的正则表达式查询上。

如果要搜索所有名称,请以Jonas

开头

您传递给query的{​​{1}}参数的值应该类似于

createUserQuery

^Jonas是使所有名称以^开头的关键

答案 1 :(得分:0)

正如@Mani所说,也许这与您的RegEx有关。您可以针对您的查询尝试以下表达式:const regex = new RegExp(query, 'g')

例如,如果为query = Jonas,则RegEx应该匹配具有full_name属性且包含“ Jonas Rodrigo”的文档。

const regex = new RegExp(query, 'g');

const createUserQuery = (user, query) => User.find({
  $and: [
    { full_name: { $regex: regex, $options: 'i' } },
    { _workspace: user._workspace },
    { active: true }
  ]
}).select('profile_pic full_name email created_date');