Python之读取MongoDB导出的BSON文件

客官°小女子只卖身不卖艺 2022-12-17 08:53 490阅读 0赞

  BSON是一种类似于JSON的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型等。
  BSON主要被用作MongoDB数据库中的数据存储和网络传输格式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。
  本文将讲述如何使用Python来读取MongoDB导出的BSON文件。

使用MongoDB导出BSON文件

  使用Studio 3T软件查看数据库,其中testdb中的内容如下:
testdb数据库
  我们使用Studio 3T软件的Export功能,将该数据库的内容以BSON格式导出,如下图:
导出BSON文件
  导出文件成功后,我们解压压缩包,即可获得teacher.bson文件。

bson模块读取BSON文件

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

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

输出结果如下:

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

代码只能读取BSON文件的第一个数据!这是什么原因呢?
  查看bson.loads源代码,如下:

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

在源代码中,我们发现该函数确实只返回了第一个数据。这样的结果不能让人满意。
  那么解决办法是什么呢?

使用pymongo读取BSON文件

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

  1. # -*- coding: utf-8 -*-
  2. import bson
  3. bson_file = open('teacher.bson', 'rb')
  4. bson_data = bson.decode_all(bson_file.read())
  5. print(type(bson_data))
  6. for data in bson_data:
  7. print(data)

输出结果如下:

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

现在我们已经读取了teacher.bson中的全部数据!
  本文来自于笔者在工作中碰到的一个读取BSON文件的困惑,故记录于此。
  本文到此结束,感谢大家的阅读~

发表评论

表情:
评论列表 (有 0 条评论,490人围观)

还没有评论,来说两句吧...

相关阅读