mongoose 正则匹配
发布于 10 年前 作者 LL101SS 10480 次浏览 最后一次编辑是 8 年前

var regex = new RegExp(sSearch, 'i'); User.find({name: regex}).exec(function (err, items){ } name 的type是String, 这样是可以的;如果换成age,age的type是Number,就报类型转换错误 CastError: Cast to number failed for value “/(?:)/i” at path “age”, 请问一下,该是怎么样的写法?

16 回复

你这个正则里面是什么东西来的啊。代码补全啊,要是数字也是[0-9]匹配

Number为什么要用正则匹配啊-.-

@heixiaoshan 前台有个搜索框,sSearch = req.body.sSearch 得到sSearch。我可能在搜索框里写name,或者age

@kenticny 搜索框里的东西是任意输入的,$or: [{name: regex},{age:regex}]

i参数是什么玩意?http://tool.oschina.net/regex# 在线正则

@heixiaoshan i 是忽略大小写啊

并行的查吧, name 用 regex 去匹配, age 用 Number(sSearch) 去查,然后聚合一下。

可以这么写 var uname = “frank”; Users.find({name:eval(’/’+uname+’/’)})

@alsotang 话说这么高大上,难度是不是提升了很多

@heixiaoshan 不会啊。。。。基本比提升难度。况且把用正则去匹配 Number 也很蛋疼啊。

@alsotang 话说我有一个疑问,例如 多个if()判断会严重影响速度,有没有好的办法可以替代多个if判断的呢,并行???

@heixiaoshan 我并不认为多个 if 会影响判断速度啊。。。尽管用 if 吧,随便一个异步操作都干掉那点性能差距了。

@alsotang 我在做东西的过程中遇到这样的问题。例如: if(err){ xxx } else{ if(a<b){for(i=0;i<a;i++){ }} if(a>b){for(i=0;i<b;i++){ }} } 发现效率慢了很多

@heixiaoshan

for(var i = 0; i < Math.max(a, b); i++) {
}

这样呢?

其实我也不觉得你原来的写法效率会低,我觉得不会有区别的

@alsotang @heixiaoshan 个人觉得tang的建议可取,用正则去匹配Number性能上应该是没有Number(aSearch)去查好。。。。

挖坟~ 后来怎么解决的

回到顶部