Overview
En esta guía, puedes aprender cómo crear documentos BSON, leer BSON de un archivo y guardar BSON en un archivo utilizando 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 BSON package. Para obtener una lista completa de los tipos compatibles, consulta la página del manual del servidor de BSON types.
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, abre un flujo de archivos en modo binario de escritura en el archivo de salida. A continuación, escribe cada documento en el archivo de salida. Asegúrese de que los documentos estén codificados en formato BSON mediante el uso del 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
Evitar la sobrecarga de rendimiento al convertir hacia y desde diccionarios de Python
La clase RawBSONDocument es una representación de un documento BSON que proporciona acceso a los bytes BSON subyacentes en bruto. Para usar objetos RawBSONDocument que representen documentos en tu colección, establece 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 utilizar objetos RawBSONDocument para modelar la colección y luego recupera el documento de muestra de los ejemplos anteriores. Selecciona 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.