如何使用node.js和MongoDB对数字进行模式匹配

如何使用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

如图所示,我在MongoDB的一个集合中有几个文档。我正在创建一个web应用程序,这是它的后端数据

每个文档都有一个属性
名称
。用户可以选择在前端搜索
名称
。现在,假设用户搜索“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
    }
  }
})
一些有用的解释性链接: