背景
日常工作任务和其他部门进行对接联调,他们提供数据供我这里查询,使用的数据库是MongoDB(同步Mysql)
问题
我的查询条件里面有手机号,但是MongoDB里面保存的手机号是脱敏字符串,类似于:132****0482,那么肯定是查不到的,通过沟通发现表中有对应的加密手机号(了解到之前设计不合理,在数据库中直接保存脱敏的数据,后面才加的加密字段),目前会出现两种情况:
- 当加密串(PHONE_EN)为空的时候,脱敏串(PHONE)保存的是明文(正常手机号)
- 当加密串(PHONE_EN)不为空的时候,脱敏串(PHONE)则保存的脱敏手机号
那么我一个手机号要查询两个字段还要分情况,当时我就是蒙蔽的,怎么想啊,MongoDB中有逻辑控制规范吗?啊,`(_)`。
脑子直接被这个问题限制了想了半天求助同事大哥,说明了遇到的问题,他的回答:为什么非要逻辑控制呢,我只要注重目的就行,我就只需要字段PHONE的明文和加密串PHONE_EN就行了呗,可以用 or
来查询噻,查询:加密串 or 明文,当我加密串为空时,肯定去看脱敏串是不是明文匹配了。
我恍然大悟,对啊,然后自己写了写查询语句,确实能实现查询,语句如下:
代码语言:javascript复制db.getCollection('risk_case_data').find({
$or:[
{"merchant.PHONE": "1860001"},{"merchant.PHONE_EN": "AGJAS;LKSJGA"}
]
})
这里自己就受到了之前思路的影响,思维固化,没有变通,一直在想如何构造条件,还是遇到的问题太少,思路打不开,简单问题复杂化,还是要多看,多思考,多动手。
今天就到这里,纪念独自懵逼的我!!