首页 > 解决方案 > 如何使用 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 框架。

标签: node.jsregexmongodb

解决方案


你可以这样做:

// 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


推荐阅读