mongodb查询报错BSONElement: bad type问题
埃及客户反馈数据无法导致,排查发现查询Mongo报错
org.bson.BsonSerializationException: Expected size to be 41, not 45.
因为没有遇到过这个问题,所以记录下;
遇见问题后,首先可以确定是数据错误导致的查询报错,猜测是bson序列化转换的时候无法转换导致的错误;于是思路为查询到这条记录然后修复;
首先思路为写个简单的脚本来排查是哪条数据的问题:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
# Author: yxhe
# Date: 2022/3/8 09:53
# ----------------------------------------------------------
from bson import json_util
from pymongo import MongoClient
if __name__ == '__main__':
client = MongoClient('mongodb://admin:vmebAltj6TIUH7so@10.54.130.10:27018/?authSource=admin')
db = client['file']
result = db["4B669F5FC553405BB9D90598DD83892D"].find({"batchId": "67C41509B080412AB2B741AAFBB38E77"},{'_id':1})
for r in result:
print(r)
运行发现报错如下
pymongo.errors.OperationFailure: BSONElement: bad type 55, full error: {u'codeName': u'Location10320', u'code': 10320, u'ok': 0.0, u'errmsg': u'BSONElement: bad type 55'}
这时候已经可以确定无法通过查询获取到具体错误的数据信息了,因为无法查询;
于是准备修复下数据库看是否可行;
通过mongo shell连接上db:
mongo --port 27017 -u "admin" -p "vmebAltj6TIUH7so" --authenticationDatabase "admin"
然后切换db:
use file
开始修复,修复官网有说明(https://docs.mongodb.com/v3.0/reference/method/db.repairDatabase/):
db.repairDatabase()
然后重新查询,发现问题修复了;
时在中春,阳和方起