因此,我想在我的Web应用程序中添加一个搜索栏,并在输入元素中输入名称时显示用户。
我通过创建mongodb查询在后端过滤名称,并在$ regex处输入用户在前端输入元素(搜索栏)中输入的字符串。我以为它运行良好,但是现在我的老板说,许多用户输入他们的名字时都没有出现。我经历了整个过程,这与我在MongoDb查询中输入的正则表达式有关。
例如,当我在搜索栏中输入“ jonas”时,我希望这将返回具有full_name
属性值Jonas Rodrigo
的用户文档。我以为我可以像下面一样简单地输入输入元素字符串,这是我的错吗?如果是这样,我该如何改善呢?
这就是它的样子:当我输入名称Jonas时,我希望该用户显示,但不幸的是他没有出现。
这是我的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用户文档示例
答案 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');