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
。