Overview
En esta guía, puede aprender cómo crear documentos BSON, leer BSON desde un archivo y escribir BSON en un archivo usando PyMongo.
BSON, o JSON binario, es el formato de datos que MongoDB utiliza para organizar y almacenar datos. Este formato incluye todos los tipos de estructuras de datos JSON y admite tipos como fechas, enteros de diferentes tamaños, ObjectIds y datos binarios. Puede usar documentos BSON en su aplicación Python incluyendo... Paquete bson. Para obtener una lista completa de los tipos admitidos, consulte la página del manual del servidor de tipos BSON.
Los documentos BSON se almacenan en colecciones de MongoDB en formato binario, mientras que PyMongo los representa como diccionarios de Python. PyMongo convierte automáticamente los diccionarios de Python en documentos BSON al insertarlos en una colección. Asimismo, al recuperar un documento de una colección, PyMongo lo convierte de nuevo en un diccionario de Python.
El siguiente ejemplo muestra un documento en formato de diccionario y BSON. Utilice el Dictionary o la pestaña BSON para ver el formato correspondiente:
{"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")
Datos de muestra
Los ejemplos de código de esta guía utilizan el siguiente documento BSON como ejemplo:
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
Crear un documento BSON
Puedes crear un documento BSON usando la misma notación que usas para crear un diccionario en Python. El siguiente ejemplo crea un documento BSON que representa el documento BSON de ejemplo anterior:
document = { "address": { "street": "Pizza St", "zipcode": "10003" }, "coord": [-73.982419, 41.579505], "cuisine": "Pizza", "name": "Mongo's Pizza" }
Cambiar un documento BSON
Puedes modificar el contenido de un documento BSON usando la misma notación que usas para modificar un diccionario en Python. El siguiente ejemplo realiza tres cambios en el documento BSON de muestra:
Agrega un nuevo campo,
restaurant_id, con el valor12345Elimina el campo
cuisineEstablece el valor del campo
nameen"Mongo's Pizza Place"
document["restaurant_id"] = 12345 del document["cuisine"] document["name"] = "Mongo's Pizza Place"
Escribir BSON en un archivo
Para escribir datos BSON en un archivo, abra un flujo de archivos en modo de escritura binaria en el archivo de salida. A continuación, escriba cada documento en el archivo de salida. Asegúrese de que los documentos estén codificados en formato BSON mediante el método bson.encode().
El siguiente ejemplo escribe el documento BSON de muestra en file.bson:
with open("file.bson", "w") as file: file.write(bson.encode(document))
Leer BSON desde un archivo
Para leer documentos BSON desde un archivo, abra un flujo de archivos en modo de lectura binaria en el archivo de entrada. A continuación, decodifique los documentos del formato BSON a medida que los lee mediante el método bson.decode().
El siguiente ejemplo lee el documento BSON de muestra de file.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"}
Trabajar con datos BSON sin procesar
PyMongo admite el uso de documentos BSON sin procesar. La siguiente lista contiene algunas situaciones que podrían requerir el uso de documentos BSON sin procesar:
Mover un documento entre bases de datos o colecciones
Escribir datos binarios en un disco
Cómo evitar la sobrecarga de rendimiento que supone convertir hacia y desde diccionarios de Python
La clase RawBSONDocument representa un documento BSON que proporciona acceso a los bytes BSON subyacentes. Para usar objetos RawBSONDocument para representar documentos en su colección, establezca el parámetro document_class del constructor MongoClient en RawBSONDocument.
Nota
RawBSONDocument los objetos son de solo lectura. Para modificar un RawBSONDocument, primero se debe convertir a un diccionario de Python.
El siguiente ejemplo configura un objeto MongoClient para usar objetos RawBSONDocument para modelar la colección y, a continuación, recupera el documento de muestra de los ejemplos anteriores. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente.
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'>
from bson.raw_bson import RawBSONDocument client = pymongo.AsyncMongoClient("<connection URI>", document_class=RawBSONDocument) collection = client.sample_restaurants.restaurants raw_doc = await collection.find_one({"name": "Mongo's Pizza"}) print(type(raw_doc))
<class 'bson.raw_bson.RawBSONDocument'>
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos analizados en esta guía, consulte la documentación de la API de bson.