解决bson.errors.InvalidDocument: Cannot encode object: Decimal('8500.00')数据插入MangoDB问题

背景:
最近公司在做一个公众号的地方展示项目,原来的数据都是直接从MySQL中直接获取的。随着数据量的增大,查询效率越来越拖拉。然后呢,就想着把MySQL中的数据迁移到MangoDB中去。
任务简洁明了,读取MySQL数据批量插入MangoDB中,任务完成,美滋滋。
具体的数据迁移方法可以看这篇文章: https://blog.csdn.net/mygodit/article/details/88887106

今天要迁移的数据表是一个storefront,存储的是店铺转让的详细信息,有店铺月租金,店铺面积,店铺位置,店铺分类等多个已知的字段。

本来想着就是跟前面的数据表迁移大同小异,修改修改表名,分类名,然后喝杯茶,聊聊天什么的,数据就能迁移好了。
万万没想到,在迁移第一条数据的时候就出了幺蛾子。

解决bson.errors.InvalidDocument: Cannot encode object: Decimal('8500.00')数据插入MangoDB问题
报了一个bug,字面意思呢,无法对插入的数据进行编码。

看起来是MangoDB 对于插入的数据类型有要求,不是什么歪瓜裂枣都能随便插入进去的。

度娘上搜了搜,发现MangoDB只能插入float,int整数类型,也就是说,我们预备迁移的某些整数类型的数据是不符合规则,
到底是哪些数据类型有问题呢?让我们继续往下看。

解决bson.errors.InvalidDocument: Cannot encode object: Decimal('8500.00')数据插入MangoDB问题
通过查看数据表的结构,我们发现 attorn_money和mouth_zujin两个字段的设计类型是decimal,decimal是MySQL中涉及金融,经济等一些对于小数点有着精确要求的字段类型,在这里用来月租金,和转让费的设计也毫无问题。

但问题就在于,MangoDB对于decimal类型的数据无法进行编码。

解决的方法,就很普通了,只需要将数据转换成MangoDB能够接收的数据类型就可以了。
解决bson.errors.InvalidDocument: Cannot encode object: Decimal('8500.00')数据插入MangoDB问题
此时,就能成功插入。问题完美解决了。