You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js在MongoDB中拼接姓名搜索并单独检索电话与邮箱

MongoDB 实现姓名拼接搜索+手机号/邮箱单独搜索

你需要的是同时支持拼接姓名搜索和手机号/邮箱单独搜索的查询逻辑,下面给出两种可行方案:

方案一:直接使用聚合表达式实现拼接匹配

基于你提供的代码,修改$or条件中的姓名匹配逻辑,用$concat拼接first_name和last_name后再做正则匹配:

router.get("/:key", authenticate, async (req, res) => {
  try {
    const searchKey = req.params.key;
    let data = await SomeModel.find({
      isActive: ACTIVE,
      $or: [
        // 匹配first_name + last_name拼接后的完整姓名(可自定义分隔符)
        {
          $expr: {
            $regexMatch: {
              input: { $concat: ["$first_name", " ", "$last_name"] }, // 若不需要空格,改为{ $concat: ["$first_name", "$last_name"] }
              regex: searchKey,
              options: "i" // 忽略大小写
            }
          }
        },
        { phone: { $regex: searchKey } }, // 手机号匹配(默认区分大小写,若需要忽略可加options: "i")
        { email: { $regex: searchKey, $options: "i" } } // 邮箱忽略大小写匹配
      ],
    });

    return res.status(200).send(data);
  } catch (err) {
    return res.status(400).send(err.message);
  }
});

关键说明

  • $expr:允许在查询条件中使用聚合管道的表达式语法
  • $concat:将first_name和last_name字段拼接成一个完整字符串,你可以根据需求调整是否添加分隔符(比如空格)
  • $regexMatch:对拼接后的字符串执行正则匹配,options: "i"保证搜索时不区分大小写

方案二:创建文本索引优化查询性能

如果你的数据量较大,正则查询的性能会比较差,推荐创建文本索引来实现高效搜索:

1. 先创建文本索引(只需执行一次)

在模型定义文件或单独的初始化脚本中执行:

// 为需要搜索的字段创建文本索引
SomeModel.createIndex({
  first_name: "text",
  last_name: "text",
  phone: "text",
  email: "text"
});

2. 使用文本搜索查询

修改路由代码为:

router.get("/:key", authenticate, async (req, res) => {
  try {
    const searchKey = req.params.key;
    let data = await SomeModel.find({
      isActive: ACTIVE,
      $text: { $search: searchKey }
    });

    return res.status(200).send(data);
  } catch (err) {
    return res.status(400).send(err.message);
  }
});

关键说明

  • 文本索引会自动处理姓名的拼接匹配(比如搜索"张三"会匹配first_name为"张"、last_name为"三"的文档)
  • 同时支持手机号、邮箱的关键词匹配,性能远优于正则查询
  • 文本搜索默认会忽略大小写,无需额外配置

内容的提问来源于stack exchange,提问作者sumanth.js

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:10:29