Docs Menu
Docs Home
/ /

Trabajando con BSON

En esta guía, puede aprender a utilizar el controlador C++ para almacenar e interactuar con datos BSON mediante el uso de bsoncxx biblioteca.

MongoDB utiliza el formato de datos BSON (JSON binario) para almacenar documentos y realizar llamadas a procedimientos remotos. Este formato de datos incluye todos los tipos de estructuras de datos JSON y admite tipos adicionales, como fechas, enteros de diferentes tamaños, ObjectId valores y datos binarios. Para obtener una lista completa de los tipos admitidos, consulte Página Tipos BSON en el manual del servidor MongoDB.

Nota

Evite agregar claves duplicadas a los documentos BSON. Aunque la especificación BSON permite claves duplicadas, estas pueden causar un comportamiento inesperado en MongoDB Server.

Muchos métodos de controlador de C++ aceptan un documento BSON como argumento. La biblioteca bsoncxx proporciona dos tipos de datos que se pueden usar para representar un documento BSON: bsoncxx::document::value y bsoncxx:document::view.

Un objeto document::value representa un documento BSON que posee su búfer de datos subyacente. Al pasar un objeto document::value a un método controlador de C++, este recibe una copia de los datos del documento BSON. Cuando un objeto document::value queda fuera de alcance, se libera su búfer subyacente.

Tip

Puede convertir los tipos de constructor a document::value tipos llamando a sus métodos auxiliares. Para obtener más información sobre los tipos de constructor, consulte la sección "Crear un documento BSON" de esta guía.

Un objeto document::view proporciona una vista no propietaria de un document::value. Este tipo te permite leer e interactuar con el contenido de un documento BSON sin poseer los datos subyacentes del documento. Cuando se pasa un objeto document::view a un método de controlador en C++, el método puede utilizar los datos del documento subyacente sin copiarlos. Puede crear una vista llamando al método view() en un objeto document::value.

Tip

Para evitar el exceso de copias, recomendamos pasar los documentos a la vista, si es posible.

Algunos métodos de controlador de C++ aceptan argumentos de tipo.document::view_or_value Puede pasar un document::view document::value objeto o a estos métodos. Debe pasar document::value argumentos por referencia rvalue para transferir la propiedad del documento al método.

Importante

Un document::view no debe sobrevivir a ningún document::value al que haga referencia. Si un document::view usa un document::value después de liberar su búfer subyacente, la vista contendrá un puntero colgante. Acceder a un puntero colgante puede provocar fallos en la aplicación, datos corruptos y otros comportamientos impredecibles.

Esta sección muestra cómo utilizar las siguientes interfaces para crear un documento BSON:

La interfaz builder::list es un generador tipo JSON para crear documentos y matrices. Para crear un documento BSON mediante el generador de listas, se construye un objeto bsoncxx::builder::list y se pasa una lista de pares clave-valor al constructor. El generador de listas crea un documento BSON si la lista clave-valor cumple los siguientes requisitos:

  • La lista tiene un número par de elementos.

  • Cada clave es de tipo string y cada valor es de tipo bson_value::value o es implícitamente convertible a uno.

Si no se cumplen los requisitos anteriores, el generador de listas crea una matriz.

Este ejemplo utiliza el generador de listas para realizar las siguientes acciones:

  • Crear un documento

  • Construir una matriz

  • Convertir el documento del constructor en un objeto bsoncxx::document::value

bsoncxx::builder::list course_doc = { "title", "Poetry",
"department", "English" };
bsoncxx::builder::list courses_array = { "Poetry", "Literature",
"Creative Writing" };
bsoncxx::document::value course{course_doc.view().get_document().value};

La interfaz builder::basic es una interfaz de tipo constructor para crear un documento BSON. Para crear un documento BSON con el constructor básico, especifique los datos del documento en una lista de objetos de pares clave-valor. Puede crear estos objetos de pares clave-valor pasando una clave y un valor al método builder::basic::kvp(). La clave debe ser de tipo string y el valor de tipo bson_value::value o convertible implícitamente a uno.

Puedes usar el método make_document() del generador básico para crear un documento y convertirlo en un bsoncxx::document::value en una sola instrucción, como se muestra en el siguiente código:

using bsoncxx::builder::basic::make_document;
using bsoncxx::builder::basic::kvp;
bsoncxx::document::value course = make_document(
kvp("title","Poetry"),
kvp("department","English"));

Como alternativa, puede crear un documento BSON con varias instrucciones añadiendo pares clave-valor a un objeto de generador básico. Este ejemplo utiliza el generador básico para realizar las siguientes acciones:

  • Inicializar un objeto builder::basic::document

  • Almacenar datos en el documento utilizando el método append()

  • Convertir el documento del constructor en un objeto bsoncxx::document::value

using bsoncxx::builder::basic::kvp;
auto course_builder = bsoncxx::builder::basic::document{};
course_builder.append(kvp("title", "Literature"),
kvp("department", "English"));
bsoncxx::document::value course{course_builder.extract()};

Importante

Recomendamos utilizar el generador básico en lugar del generador de transmisiones.

Para añadir correctamente cada nuevo valor, un generador de flujos debe registrar el estado del documento actual. No se puede reutilizar el generador de flujos inicial después de que este cambie. Por lo tanto, todos los valores intermedios deben almacenarse en nuevas variables si se crea un documento con varias sentencias. Debido a esta complejidad, se desaconseja el uso del generador de flujos.

La interfaz builder::stream es una interfaz de transmisión para construir objetos BSON complejos. Para crear un documento BSON con el generador de secuencias, inicialice un objeto builder::stream::document. A continuación, puede usar el operador << para transmitir claves y valores a su generador.

El siguiente código muestra cómo utilizar el generador de transmisiones para realizar las siguientes acciones:

  • Crear un documento

  • Convertir el documento en un objeto bsoncxx::document::value

auto course_builder = bsoncxx::builder::stream::document{};
course_builder << "title" << "Creative Writing" << "credits" << bsoncxx::types::b_int32{4};
bsoncxx::document::value course{course_builder.extract()};

También puedes convertir la transmisión a un bsoncxx::document::value utilizando el token builder::stream::finalize, como se muestra en el siguiente ejemplo:

using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::finalize;
bsoncxx::document::value doc = document{} << "title" << "Literature" << finalize;

BSON es una serialización de documentos JSON codificada en binario, no legible. Para previsualizar el contenido de un documento BSON en un formato legible, puede usar el método bsoncxx::to_json() para convertir el documento al formato JSON extendido.

El formato JSON extendido es una extensión del JSON estándar que incluye representaciones de cadenas de tipos de datos BSON. Para obtener más información, consulte la guía JSON extendido de MongoDB en el manual del servidor MongoDB.

El método bsoncxx::to_json() acepta un bsoncxx::document::view del documento BSON que desea convertir. Este método devuelve un objeto std::string que representa su documento BSON en formato JSON extendido.

El siguiente código muestra cómo convertir un documento BSON al formato JSON extendido e imprimir los resultados:

bsoncxx::document::value course = make_document(
kvp("title","Screenwriting"),
kvp("department","English"));
std::cout << bsoncxx::to_json(course.view()) << std::endl;
{ "title" : "Screenwriting", "department" : "English" }

Para aprender más sobre los conceptos mencionados en esta guía, consulta las siguientes entradas del manual del servidor:

Para obtener más información sobre cómo realizar operaciones de agregación, consulte la Guíade agregación.

Para obtener más información sobre los tipos y métodos mencionados en esta guía, consulte la siguiente documentación de API:

Volver

Datos de Time Series

En esta página