今天下午修改了之前写的代码,修改完成后,发现旧bug解决了,新bug又来了、后台管理券信息点击修改券类型时,mongo中对应的类型没有变,之前还可以。下午修改代码时也没有动其中的修改方法,研究了代码发现没有问题,但就是改变不了券类型,最后没法了,请教了技术总监,我俩也没有发现问题所在之处,就逐个排查,
1:先看是否是因为券ID太长,导致mongo不能查询到所导致。(在mongo中用同样的ID进行修改可以批量修改成功)故排除
2:是否是因为PHP代码传过去的券ID 不是字符串的原因,因为mongo中如果数字太长,需要对数字进行strval() 强制类型转换。后经测试 排除
3:写日志查询逐行代码中的 变量/数组 的值是否正确。以及mongo执行语句返回的值是否正确 (经测试,一切正常)
以上三点排查都无问题,就纳闷了,难道是mongo中update语句的问题?
于是百度,mongoDB update的用法。最后恍然大悟。原先能执行修改语句成功,是因为测试的券都是单个的,要想批量修改其列的值,需要在update() 后加第三个参数 如下
$this->mongoDbName->update($where,array('$set'=>array("recom" => $recom)),array("multiple" => true));
如果不加那么只会修改最后一个券的值,虽然只是一个参数的问题,尽管找了很长时间,但是跟技术总监一起调试bug从中也学到了不少技巧,收益匪浅;