Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Pymongo 驱动程序
/

BSON

在本指南中,您可以学习;了解如何使用PyMongo创建BSON文档、从文件读取BSON以及写入BSON写入文件。

BSON(即 Binary JSON)是MongoDB用于组织和存储数据的数据格式。此数据格式包括所有JSON数据结构类型,并增加了对日期、不同大小整数、ObjectId 和二进制数据等类型的支持。通过包含 BSON 包,您可以在Python应用程序中使用BSON文档。有关支持类型的完整列表,请参阅BSON 类型服务器手册页面。

BSON文档以二进制格式存储在MongoDB集合中,而PyMongo将BSON文档表示为Python字典。将Python字典插入集合时, PyMongo会自动将其转换为BSON文档。同样,当您从集合中检索文档时, PyMongo会将BSON文档转换回Python字典。

以下示例显示了字典和BSON格式的文档。使用 DictionaryBSON标签页查看相应的格式:

{"hello": "world"}
\x16\x00\x00\x00 # total document size
\x02 # 0x02 = type String
hello\x00 # field name
\x06\x00\x00\x00world\x00 # field value
\x00 # 0x00 = type EOO ("end of object")

本指南中的代码示例使用以下 BSON 文档作为示例:

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

您可以使用与在Python中创建字典相同的符号来创建BSON文档。以下示例创建一个BSON文档来表示前面的示例BSON文档:

document = {
"address": {
"street": "Pizza St",
"zipcode": "10003"
},
"coord": [-73.982419, 41.579505],
"cuisine": "Pizza",
"name": "Mongo's Pizza"
}

您可以使用与在Python中修改字典相同的表示法来修改BSON文档的内容。以下示例对示例BSON文档进行了三项更改:

  1. 添加值为 12345 的新字段restaurant_id

  2. 删除 cuisine 字段

  3. name 字段的值设置为 "Mongo's Pizza Place"

document["restaurant_id"] = 12345
del document["cuisine"]
document["name"] = "Mongo's Pizza Place"

要将BSON数据写入文件,请在输出文件上以写入二进制模式打开文件流。 然后,写入每个文档写入输出文件。 使用 bson.encode() 方法确保文档以BSON格式编码。

以下示例将示例BSON文档写入 file.bson

with open("file.bson", "w") as file:
file.write(bson.encode(document))

要从文件读取BSON文档,请在输入文件上以读取二进制模式打开文件流。 然后,在阅读文档时使用 bson.decode() 方法将BSON格式的文档解码。

以下示例从 file.bson 读取示例BSON文档:

with open("file.bson", "rb") as file:
data = file.read()
document = bson.decode(data)
print(document)
{"address": {"street": "Pizza St", "zipcode": "10003"}, "coord": [-73.982419, 41.579505], "cuisine": "Pizza", "name": "Mongo's Pizza"}

PyMongo支持使用原始BSON文档。以下列表包含一些可能需要使用原始BSON文档的情况:

  • 在数据库或集合之间移动文档

  • 将二进制数据写入磁盘

  • 绕过Python字典转换带来的性能开销

RawBSONDocument 类是BSON文档的表示,可提供对根本的原始BSON字节的访问权限。要使用 RawBSONDocument 对象表示集合中的文档,请将 MongoClient 构造函数的 document_class 参数设立为 RawBSONDocument

注意

RawBSONDocument 对象是只读的。要修改 RawBSONDocument,必须首先将其转换为Python字典。

以下示例将配置 MongoClient对象以使用 RawBSONDocument 对象对集合进行建模,然后检索前面示例中的示例文档:

from bson.raw_bson import RawBSONDocument
client = pymongo.MongoClient("<connection URI>", document_class=RawBSONDocument)
collection = client.sample_restaurants.restaurants
raw_doc = collection.find_one({"name": "Mongo's Pizza"})
print(type(raw_doc))
<class 'bson.raw_bson.RawBSONDocument'>

要学习;了解有关本指南中讨论的任何方法或类型的更多信息,请参阅BSON API文档。

后退

Data Formats

在此页面上