Node.js 如何在Mongodb中生成带有数字的正则表达式

Node.js 如何在Mongodb中生成带有数字的正则表达式,node.js,regex,mongodb,mongoose,Node.js,Regex,Mongodb,Mongoose,我有如下数据。 [ { num: 123, name: 'good'}, { num: 12345, name: 'hey'}, { num: 4523, name: 'yo' }, { num: 777, name: 'hihi' } ] 我想使用正则表达式进行搜索以获得一些结果。 例如,当我输入45时,这个搜索只有1234523 a.find({num: {$regex: req.query.q}, name: 'yo'}) 但当我通过类似“45”的查询时,它会说“不能使

我有如下数据。

[
  { num: 123, name: 'good'},
  { num: 12345, name: 'hey'},
  { num: 4523, name: 'yo' },
  { num: 777, name: 'hihi' }
]
我想使用正则表达式进行搜索以获得一些结果。
例如,当我输入45时,这个搜索只有1234523

a.find({num: {$regex: req.query.q}, name: 'yo'})
但当我通过类似“45”的查询时,它会说“不能使用带数字的$regex”。

如何使用带有数字的正则表达式进行搜索?非常感谢您的阅读。

只有当要匹配的字段具有stirng值时,正则表达式才能匹配,但在您的例子中num是一个数字

Mongodb文档中也这么说:

但是,有一种使用“$where”的变通方法,您可以在其中执行Javascript以返回布尔值

db.collection.find({
  $where: "/45/.test(this.num) && this.name==='yo'"
})
我在mongoplayground上试过了。 试一试:

要了解更多$where的工作原理,您可以在此处查看Mongodb文档:

在MongoDb 4.2中,也有一种不使用$where的方法:


只有当匹配的字段具有stirng值时,正则表达式才能匹配,但在您的例子中num是一个数字

Mongodb文档中也这么说:

但是,有一种使用“$where”的变通方法,您可以在其中执行Javascript以返回布尔值

db.collection.find({
  $where: "/45/.test(this.num) && this.name==='yo'"
})
我在mongoplayground上试过了。 试一试:

要了解更多$where的工作原理,您可以在此处查看Mongodb文档:

在MongoDb 4.2中,也有一种不使用$where的方法:


非常感谢您的回复。但我还有一个问题。我想添加更多“名称”字段。我编辑了我的问题。如何在何处使用多个条件?我用的是猫鼬。另一个问题是,在你的情况下,什么意味着“测试”?编辑了答案test'是Javascript中RegExp原型中的一个函数,因此在这里您可以像在JS中一样使用它。只要确保$where字符串中的表达式产生一个布尔值{orderTime:{$gte:
${req.query.from}T00:00:00
,$lte:
${req.query.to}T23:59:59.000
,状态:{$nin:['cancel']},如果我对find有更多条件的话。如何在$where中添加此条件?我对mongoplayground进行了一点编辑:注意,我也对数据进行了一点编辑,其中有两个文档中有“45”和名称“yo”,但其中一个由于时间原因被过滤掉。我还有一个问题。我不能将您的条件用于mongoose或mongodB的“countDocument”吗?我收到错误“$where在此上下文中不允许”,非常感谢您的回复。但我还有一个问题。我想添加更多“名称”字段。我编辑了我的问题。如何在何处使用多个条件?我用的是猫鼬。另一个问题是,在你的情况下,什么意味着“测试”?编辑了答案test'是Javascript中RegExp原型中的一个函数,因此在这里您可以像在JS中一样使用它。只要确保$where字符串中的表达式产生一个布尔值{orderTime:{$gte:
${req.query.from}T00:00:00
,$lte:
${req.query.to}T23:59:59.000
,状态:{$nin:['cancel']},如果我对find有更多条件的话。如何在$where中添加此条件?我对mongoplayground进行了一点编辑:注意,我也对数据进行了一点编辑,其中有两个文档中有“45”和名称“yo”,但其中一个由于时间原因被过滤掉。我还有一个问题。我不能将您的条件用于mongoose或mongodB的“countDocument”吗?我收到错误“$where在此上下文中不允许”