Menu Docs
Página inicial do Docs
/ / /
Driver C++
/

Trabalhando com BSON

Nesta página

  • Visão geral
  • Formato de dados JSON
  • Valores e visualizações de JSON
  • Crie um documento BSON
  • Construtor de listas
  • Construtor básico
  • Construtor de Streams
  • Imprima um documento BSON
  • Informações adicionais
  • Documentação da API

Neste guia, você aprenderá a usar o driver C++ para armazenar e interagir com dados BSON usando a biblioteca bsoncxx.

O MongoDB usa o formato de dados BSON, ou Binary JSON, para armazenar documentos e fazer chamadas de procedimento remotas. Este formato de dados inclui todos os tipos de estrutura de dados JSON e suporta tipos adicionais, incluindo datas, inteiros de tamanhos diferentes, ObjectId valores e dados binários. Para obter uma lista completa dos tipos compatíveis, consulte a página Tipos de BSON no manual do MongoDB Server .

Muitos métodos de driver C++ aceitam um documento BSON como argumento. A biblioteca do bsoncxx fornece dois tipos de dados que você pode utilizar para representar um documento BSON : bsoncxx::document::value e bsoncxx:document::view.

Um objeto document::value representa um documento BSON que possui seu buffer subjacente de dados. Quando você passa um objeto document::value para um método de driver C++ , o método recebe uma cópia dos dados do documento BSON. Quando um objeto document::value sai do escopo, seu buffer subjacente é liberado.

Dica

Você pode converter tipos de construtor em document::value tipos de chamando métodos de assistente no construtor. Para saber mais sobre os tipos de construtor, consulte a seção Criar um documento BSON neste guia.

Um objeto document::view fornece uma visualização não própria de um document::value. Esse tipo permite ler e interagir com o conteúdo de um documento BSON sem possuir os dados subjacentes do documento. Quando você passa um objeto document::view para um método de driver C++ , o método pode usar dados do documento subjacente sem copiá-los. Você pode criar uma visualização chamando o método view() em um objeto document::value.

Dica

Para evitar cópias em excesso, recomendamos passar documentos por visualização, se possível.

Alguns métodos de driver C++ aceitam argumentos do document::view_or_value tipo. Você pode passar um document::view document::value objeto ou para estes métodos. Você deve passar document::value argumentos por referência de rvalue para transferir a propriedade do documento para o método.

Importante

Um document::view não deve sobreviver a nenhum document::value a que ele faz referência. Se um document::view utilizar um document::value após seu buffer subjacente ser liberado, a visualização conterá um ponteiro pendente. Acessar um ponteiro pendente pode causar falhas no aplicação , dados corrompidos e outros comportamentos imprevisíveis.

Esta seção mostra como usar as seguintes interfaces para criar um documento BSON:

A interface do builder::list é um construtor semelhante a JSON para construir documentos e arrays. Para criar um documento BSON usando o construtor de listas, construa um objeto bsoncxx::builder::list , passando uma lista de pares de valores-chave para o construtor. O construtor de listas criará um documento BSON se a lista de valores-chave atender aos seguintes requisitos:

  • A lista tem um número par de elementos.

  • Cada chave é um tipo string e cada valor é um tipo bson_value::value ou é implicitamente convertível em um.

Se os requisitos anteriores não forem atendidos, o construtor de lista criará uma array.

Este exemplo utiliza o construtor de lista para executar as seguintes ações:

  • Construir um documento

  • Construir uma array

  • Converter o documento do construtor em um 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};

A interface do builder::basic é uma interface de estilo de construtor para construir um documento BSON. Para criar um documento BSON usando o construtor básico, especifique os dados do documento em uma lista de objetos de par de chave-valor. Você pode criar esses objetos de par de chave-valor passando uma chave e um valor para o método builder::basic::kvp(). A chave deve ser do tipo string e o valor deve ser do tipo bson_value::value ou implicitamente convertível em um.

Você pode usar o método make_document() do construtor básico para criar um documento e convertê-lo em bsoncxx::document::value em uma única instrução, conforme mostrado no código a seguir:

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, você pode criar um documento BSON em várias declarações anexando pares de valor-chave a um objeto de construtor básico. Este exemplo usa o construtor básico para executar as seguintes ações:

  • Inicialize um objeto builder::basic::document

  • Armazene dados no documento usando o método append()

  • Converter o documento do construtor em um 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 usar o construtor básico em vez do construtor de fluxo.

Para anexar adequadamente cada novo valor, um construtor de fluxo deve acompanhar o estado do documento atual. Não é possível reutilizar o construtor de fluxo inicial depois que esse estado mudar. Como resultado, todos os valores intermediários devem ser armazenados em novas variáveis se você construir um documento em várias instruções. Devido a essa complexidade, o uso do construtor de fluxo é desaconselhado.

A interface builder::stream é uma interface de streaming para construir objetos BSON complexos. Para criar um documento BSON usando o construtor de fluxo, inicialize um objeto builder::stream::document . Em seguida, você pode usar o operador << para transmitir chaves e valores para o seu construtor.

O código a seguir mostra como usar o construtor de stream para executar as seguintes ações:

  • Construir um documento

  • Converter o documento em um 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()};

Você também pode converter o stream em um bsoncxx::document::value usando o token builder::stream::finalize, conforme mostrado no exemplo a seguir:

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

BSON é uma serialização com código binário de documentos JSON que não é legível por humanos. Para visualizar o conteúdo de um documento BSON em um formato legível por humanos, você pode usar o método bsoncxx::to_json() para converter seu documento em formato JSON estendido.

O formato JSON estendido é uma extensão do JSON padrão que inclui representações de string de tipos de dados BSON. Para saber mais, consulte o guia MongoDB Extended JSON no manual do MongoDB Server .

O método bsoncxx::to_json() aceita um bsoncxx::document::view do documento BSON que você deseja converter. Este método gera um objeto std::string representando seu documento BSON no formato JSON estendido.

O seguinte código mostra como converter um documento BSON para o formato JSON estendido e imprimir os 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 saber mais sobre os conceitos mencionados neste guia, consulte as seguintes entradas manuais do servidor:

Para saber mais sobre como realizar operações de leitura, consulte Ler dados do MongoDB.

Para saber mais sobre como realizar operações de agregação , consulte o guia Transforme seus dados com agregação .

Para saber mais sobre os tipos e métodos mencionados neste guia, consulte a seguinte documentação da API:

Voltar

Dados de Time Series