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 utiliza MongoDB para organizar y almacenar datos. Este formato de datos incluye todos los tipos de estructura de datos JSON y añade soporte para tipos como fechas, enteros de diferentes tamaños, ObjectIds y datos binarios. Puedes utilizar documentos BSON en tu aplicación Python incluyendo la 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 representa los documentos BSON como diccionarios de Python. PyMongo convierte automáticamente los diccionarios de Python en documentos BSON al insertarlos en una colección. Del mismo modo, cuando se recupera un documento de una colección, PyMongo convierte el documento BSON de nuevo en un diccionario de Python.
El siguiente ejemplo muestra un documento tanto en formato diccionario como BSON. Utiliza 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 en esta guía usan 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 de muestra BSON 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 utilizando 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_idcon 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"
Guardar 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 guarda 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 de un archivo, abre un flujo de archivo en modo de lectura binaria en el archivo de entrada. Luego, decodifica los documentos del formato BSON mientras los lees usando 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 en bruto. La siguiente lista contiene algunas situaciones que pueden 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 aprender más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consulta la documentación de bson API.