node.js - 如何使用 node.js 和 MongoDB 对数字进行模式匹配
问题描述
如此快照所示,我在 MongoDB 的集合中有多个文档。我正在创建一个作为后端数据的 Web 应用程序。
每个文档都有一个属性name
。用户可以选择name
在前端搜索。现在,假设用户搜索“Sam”,那么我将返回name
正好是“Sam”或以“Sam”开头的文档。我已经使用以下代码实现了这一点:
let name = "^"+req.body.name;
const name_regex = new RegExp(name, 'gi');
try {
let members = await Member.find({ name: req.body.name=="" ? /^$|/ : name_regex});
res.send(members);
}
即,如果用户不提供名称,则返回所有文档,否则返回与正则表达式匹配的文档。
因此,如果用户搜索“Sam”,则输出全部为 3 个文档,因为它们都name
以“Sam”开头,但如果用户搜索“Samm”,则只返回一个文档,其中name
“Sammy” .
现在,我想在age
属性上实现相同的逻辑,即如果用户搜索年龄:2,那么我想返回年龄正好为 2 或以数字 2 开头的所有文档。但我无法使用上面的方法正弦它只适用于字符串。
注意:我使用的是猫鼬包和 Express 框架。
解决方案
你可以这样做:
// regular expression matching anything that starts with two
const age_regex = /^2/;
Member.find({
$expr: {
$regexMatch: {
input: {
$toString: "$age" // Casting the age value to a string
},
regex: age_regex
}
}
})
一些有用的解释性链接:$expr,$regexMatch,$toString