mongodb如何不按字符比较来筛选数据?
发布于 7 年前 作者 abcdGJJ 2964 次浏览 来自 问答

目前我有一些数据是字符型的数字,想要在其中找出小于60的数字 操作数据库用的是mongoose,在比较的时候发现gt()、lt()的比较是按照字符来比较的,即12 < 2这种比较 我是通过下面的方法来过滤数据的,但是数据中还有很多小数(6.4)我过滤不出来

query = {
$or: [{$and: [{ "oriScore": { $lt: "60"}}, { "oriScore": { $ne: "100"}}]}, {"oriScore": "7"}, {"oriScore": "8"}, { "oriScore": "9"}, {"oriScore": "不合格"}]
}

有没有什么办法在不使用$where的情况找出这些数据?

2 回复

你这条件我试了下,是可以筛选出6.4的,但是不可以筛选出 7.n , 8.n 等等。 这个算是一种思路,就是个位数的可以在前面加个0,如 07.4,这个是可以正常排序的。 不过我觉得可以用正则表达式更简单点。 db.data.find({ oriScore:{ $regex: /^(([1,2,3,4,5]?\d(\.\d)?)|(不合格))$/ } })

希望对你有所帮助。

@Sily-P 原来还可以用正则,受教了

回到顶部