Mongoose查找()RegExp数字types字段

我试图创build一个filter的表,当我需要通过正则expression式find行我有错误下面。 我如何使用RegExp与字段types的数字? 更改string的字段types,是一个好主意?

var ContractSchema = new Schema({ userId: {type: Schema.Types.ObjectId, ref: 'User'}, number: Number, // ... }); module.exports = mongoose.model('Contract', ContractSchema); Contract.find({number: /555/}, function(err, contracts){ console.log(err, contracts); }); 

在path“number”处投射数值失败的值为“/ 555 /”

好的正则expression式只能在string上工作。 但是,您仍然可以这样做,尽pipe这样做效率很低:

 Contract.find( { "$where": "function() { return this.number.toString().match(/555/) != null; }" } ).function(err,contracts) { // do something with results }); 

MongoDB $where查询运算符允许在服务器上为集合中的每个文档或其他查询条件中的每个文档评估JavaScript条件。

基本上,评估将字段值转换为一个String ,然后允许正则expression式操作。

否则,您可以更改内容或为string表示添加另一个字段。 但是,除非您使用string开头的锚点^ ,否则即使是真正的string字段上的$regex操作,也比使用JavaScript评估更加高效。

PS确保您的服务器允许JavaScript评估。 有些人selectclosures此function。 但它应该是默认情况下。

可以将您的number转换为每个文档的stringtypes,然后您可以正确高效地使用正则expression式,或者放弃使用RegEx,并使用内置的Mongo过滤选项。

例如,要查找具有特定值的数字:

 {number: 555} 

或者在范围(500,600)中find一个数字:

 {number: {$gt: 500, $lt: 600}} 

这里是一些常见的查询操作符列表 。

这两种方法都比在查询时将每个Number转换为String更高效。