猫鼬:使用正则表达式查询全名

枫木

我正在使用以下代码通过名字或姓氏搜索用户:

var re = new RegExp(req.params.search, 'i');

User.find()
    .or([{ firstName: re }, { lastName: re }])
    .exec(function(err, users) {
        res.json(JSON.stringify(users));
    });

如果search等于'John''Smith'则效果很好,但不适用于'John Sm'

任何线索如何完成这种查询?

谢谢!

免责声明:该问题最初出现在3年前的上一个问题的评论中,至今仍未得到解答。我正在开始一个新线程,因为1)这不是主要问题,并且2)我认为这很有趣,可以拥有自己的线程

编辑:

假设数据库包含两个记录:John SmithJohn Kennedy

  • 查询John应同时返回John SmithJohn Kennedy
  • 查询John Sm应仅返回John Smith
泽蒙

用单词分隔搜索词,然后使用交替运算符('|')将其分隔。

var terms = req.params.search.split(' ');

var regexString = "";

for (var i = 0; i < terms.length; i++)
{
    regexString += terms[i];
    if (i < terms.length - 1) regexString += '|';
}

var re = new RegExp(regexString, 'ig');

对于输入'John Smith',这将创建一个看起来像的正则表达式/John|Smith/ig对于单个单词,只要输入为真,就可以返回true。'John Sm'

你可以这个正则表达式来获得一个更适合您的需求。

编辑:

这里的问题是您的姓名字段是分开的。在这种情况下,对两个字段应用相同的正则表达式将不会得到所需的结果。正则表达式需要使用完整名称应用于相同的字段。

一个可能的解决方案是使用聚合:

User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

猫鼬:使用正则表达式查询全名

来自分类Dev

猫鼬查询带有特殊字符的正则表达式

来自分类Dev

使用正则表达式从全名中删除称呼

来自分类Dev

如何在猫鼬中使用正则表达式查找项目

来自分类Dev

使用猫鼬正则表达式与文本在mongo db中搜索

来自分类Dev

如何在猫鼬中使用正则表达式查找项目

来自分类Dev

为猫鼬URI创建一个正则表达式

来自分类Dev

Ruby中的全名正则表达式

来自分类Dev

Javascript全名正则表达式问题

来自分类Dev

正则表达式全名由逗号分隔

来自分类Dev

正则表达式允许使用全名并以字母开头的任何语言字符

来自分类Dev

MongoDB使用正则表达式查询空格

来自分类Dev

使用正则表达式访问UPDATE查询

来自分类Dev

使用正则表达式修改查询?

来自分类Dev

使用正则表达式对ObjectId查询MongoDB

来自分类Dev

使用哪个-递归查询或特定的正则表达式

来自分类Dev

mysql-在查询中使用正则表达式

来自分类Dev

如何使用正则表达式查询 MongoDB?

来自分类Dev

使用正则表达式查询的 Zend 框架

来自分类Dev

正则表达式查询

来自分类Dev

正则表达式查询的顺序

来自分类Dev

正则表达式SPARQL查询

来自分类Dev

Matlab正则表达式查询

来自分类Dev

正则表达式SPARQL查询

来自分类Dev

Powershell 正则表达式查询

来自分类Dev

正则表达式查询,描述

来自分类Dev

grep 正则表达式查询

来自分类Dev

正则表达式 splunk 查询

来自分类Dev

正则表达式,用于验证全名,并在方括号中加上电子邮件(必须使用方括号)