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

MongoDB聚合:如何拼接含可选中间名的全名并实现匹配查询?

解决MongoDB聚合中含可选中间名的姓名拼接与搜索问题

可以通过$cond结合$exists运算符判断文档是否存在middleName字段,动态拼接完整姓名,避免因字段缺失导致的报错。以下是修正后的聚合管道:

User.aggregate([
  {
    "$project": {
      fullName: {
        "$cond": {
          "if": { "$exists": ["$middleName", true] },
          "then": { "$concat": ["$firstName", " ", "$middleName", " ", "$lastName"] },
          "else": { "$concat": ["$firstName", " ", "$lastName"] }
        }
      },
      // 若需要保留原文档字段,可添加如下投影规则:
      // firstName: 1,
      // lastName: 1,
      // middleName: 1
    }
  },
  {
    $match: {
      "fullName": {
        $regex: /[a-z\s]*oba[a-z\s]*/i
      }
    }
  }
])

代码说明

  • $exists: ["$middleName", true]:精准判断当前文档是否包含middleName字段
  • 存在middleName时,按名 + 中间名 + 姓的格式拼接完整姓名
  • 不存在middleName时,沿用原逻辑拼接名 + 姓
  • 若需要在返回结果中保留原文档的字段,可在$project阶段添加对应字段的投影规则(如示例注释部分)

测试验证

  • 搜索/ken/i会匹配到John F Kennedy的文档
  • 搜索/oba/i会匹配到Barack Obama的文档
  • 搜索/john f/i也能准确匹配到带中间名的文档

内容的提问来源于stack exchange,提问作者Saurav Ghimire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:45:41