如何使用node.js和MongoDB对数字进行模式匹配
如图所示,我在MongoDB的一个集合中有几个文档。我正在创建一个web应用程序,这是它的后端数据 每个文档都有一个属性如何使用node.js和MongoDB对数字进行模式匹配,node.js,regex,mongodb,Node.js,Regex,Mongodb,如图所示,我在MongoDB的一个集合中有几个文档。我正在创建一个web应用程序,这是它的后端数据 每个文档都有一个属性名称。用户可以选择在前端搜索名称。现在,假设用户搜索“Sam”,那么我将返回name正是“Sam”或以“Sam”开头的文档。我使用以下代码实现了这一点: let name = "^"+req.body.name; const name_regex = new RegExp(name, 'gi'); try { let members = await M
名称
。用户可以选择在前端搜索名称
。现在,假设用户搜索“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);
}
i、 例如,如果用户没有提供名称,则返回所有文档,否则返回与正则表达式匹配的文档
因此,如果用户搜索“Sam”,则输出为所有3个文档,因为它们都具有以“Sam”开头的名称
,但如果用户搜索“Samm”,则仅返回一个文档,其中名称
为“Sammy”
现在,我想在age
属性上实现相同的逻辑,即,如果用户搜索age:2,那么我想返回年龄正好为2或以数字2开头的所有文档。但是我无法使用上面的方法,因为它只适用于字符串
注意:我使用的是mongoose软件包和Express framework。您可以这样做:
// 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
}
}
})
一些有用的解释性链接: