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

如何在Mongoose中查询仅含单个指定单词值的文档?

Mongoose精准匹配单个指定单词的查询方案

现有数据示例:

const data = [
  { "name": "Shubham"},
  {"name":"Shubham Sharma"},
  {"name":"Sharma"}
];

需求:搜索"Shubham"时,仅返回{"name": "Shubham"}这一条数据,但原查询代码无法实现目标。

原代码问题分析

原代码使用的正则^${name.toLowerCase()}仅限制了字符串开头匹配目标单词,因此会命中所有以"shubham"开头的字符串(比如"Shubham Sharma"),同时异步写法存在await与exec回调混用的错误。

修正方案

要实现精准匹配单个单词,需要让正则同时限制字符串的开头和结尾,确保字段值与目标单词完全一致,同时修正异步逻辑:

const targetName = "Shubham";
// 正则添加$锚点,要求整个字符串完全匹配
const regexp = new RegExp(`^${targetName.toLowerCase()}$`);

try {
  const users = await usersModel.find({ name: regexp })
    .limit(40)
    .collation({ locale: "en", caseLevel: true })
    .exec();
  // 返回结果仅包含name为"Shubham"的文档
  console.log(users);
} catch (err) {
  console.error("查询出错:", err);
}

可选调整(大小写不敏感匹配)

如果不需要严格区分大小写,可以改用正则的i标志,同时移除collation的caseLevel设置:

const regexp = new RegExp(`^${targetName}$`, 'i');
const users = await usersModel.find({ name: regexp })
  .limit(40)
  .collation({ locale: "en" })
  .exec();

内容的提问来源于stack exchange,提问作者Shubham Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:40:39