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

