Python之读取MongoDB导出的BSON文件

火山方舟向量数据库大模型

BSON是一种类似于JSON的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型等。

BSON主要被用作MongoDB数据库中的数据存储和网络传输格式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。

本文将讲述如何使用Python来读取MongoDB导出的BSON文件。

使用MongoDB导出BSON文件

使用Studio 3T软件查看数据库,其中testdb中的内容如下:

picture.image testdb数据库

我们使用Studio 3T软件的Export功能,将该数据库的内容以BSON格式导出,如下图:

picture.image 导出BSON文件

导出文件成功后,我们解压压缩包,即可获得teacher.bson文件。

bson模块读取BSON文件

我们使用bson文件来读取teacher.bson文件,代码如下:


        
# -*- coding: utf-8 -*-  
import bson  
bson_file = open('teacher.bson', 'rb')  
bson_data = bson.loads(bson_file.read())  
print(bson_data)  

    

输出结果如下:


        
{'\_id': b'5f5f9304d18befbe1149fdba', 'name': 'zhanshan', 'age': 25}  

    

代码只能读取BSON文件的第一个数据!这是什么原因呢?

查看bson.loads源代码,如下:


        
def loads(data):  
    """  
        Given a BSON string, outputs a dict.  
    """  
    return decode_document(data, 0)[1]  

    

在源代码中,我们发现该函数确实只返回了第一个数据。这样的结果不能让人满意。

那么解决办法是什么呢?

使用pymongo读取BSON文件

我们先安装pymongo模块,读取teacher.bson文件的代码如下:


        
# -*- coding: utf-8 -*-  
import bson  
bson_file = open('teacher.bson', 'rb')  
bson_data = bson.decode_all(bson_file.read())  
print(type(bson_data))  
for data in bson_data:  
    print(data)  

    

输出结果如下:


        
<class 'list'>  
{'\_id': ObjectId('5f5f9304d18befbe1149fdba'), 'name': 'zhanshan', 'age': 25}  
{'\_id': ObjectId('5f5f9304d18befbe1149fdbb'), 'name': 'lisi', 'age': 36}  
{'\_id': ObjectId('5f5f9304d18befbe1149fdbc'), 'name': 'wangwu', 'age': 27}  

    

现在我们已经读取了teacher.bson中的全部数据!

本文来自于笔者在工作中碰到的一个读取BSON文件的困惑,故记录于此。

更多阅读

程序运行慢?你怕是写的假 Python

让 Pandas DataFrame 性能飞升 40 倍

用 PyQt 打造具有专业外观的GUI(上)

特别推荐

程序员摸鱼指南

picture.image

为你精选的硅谷极客资讯,

来自FLAG巨头开发者、技术、创投一手消息

picture.image

点击下方阅读原文加入 社区会员

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动客户端性能优化最佳实践
在用户日益增长、需求不断迭代的背景下,如何保证 APP 发布的稳定性和用户良好的使用体验?本次分享将结合字节跳动内部应用的实践案例,介绍应用性能优化的更多方向,以及 APM 团队对应用性能监控建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论