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
相关产品推荐
相关产品推荐

