Bug 复现
后台使用 Node.js + Express + Mongoose
项目中需要用到 MongoDB 的条件查询$gt,用法也很简单:
| |
更新于2019/11/9,发誓再也不写回调后的我回来更新此处代码了🌚:
| |
而且强大的地方还在于无论这里的thisPrint类型是Number还是String,MongDB 会自动识别为Number类型来和数据库中的字段进行比较。
那么问题出在哪里呢?当thisPrint的值小于1000时,查询的结果是没有任何问题的,但如果大于1000条件筛选就会失效。
Figure out
这种看似和筛选条件大小有关系的 bug 实则非也,而是和数据库中需要比对的字段的类型有关,也就是上述例子中last_day_click存储类型的原因。当类型为String时就会发生偶尔失效的状况,这就要求在存储这个字段的时候将它存为Number类型,即在 Mongoose 的Schema中将其类型定义为Number。