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()

然后重新查询,发现问题修复了;

posted @ 2022-03-08 11:26  faylinn  阅读(363)  评论(0编辑  收藏  举报
、、、