gpt4 book ai didi

regex - 数字类型字段的 Mongoose find() RegExp

转载 作者:可可西里 更新时间:2023-11-01 10:28:27 27 4
gpt4 key购买 nike

我尝试创建一个带过滤器的表,当我需要通过正则表达式查找行时,出现以下错误。我如何将 RegExp 与字段类型 Number 一起使用?更改字符串的字段类型,是个好主意吗?

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);
});

Cast to number failed for value "/555/" at path "number"

最佳答案

当然,正则表达式只适用于字符串。但是你仍然可以这样做,尽管这样做效率很低:

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

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

基本上,该评估将字段值转换为 String,然后允许对其进行正则表达式操作。

否则,您可以更改您的内容或为字符串表示添加另一个字段。但是除非您从字符串的开头使用 anchor ^ ,否则即使是对实际字符串字段的 $regex 操作也仅比使用 JavaScript 评估更有效显示。

P.S 确保您的服务器允许 JavaScript 评估。有些人选择关闭此功能。但它应该默认打开。

关于regex - 数字类型字段的 Mongoose find() RegExp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30722650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com