BSON (Binary JSON) é uma serialização codificada em binário de documentos semelhantes a JSON usados em bancos de dados MongoDB. Este artigo fornece uma visão geral do BSON, o formato de dados binários usado pelo MongoDB para armazenar documentos.
Ele explica o que é BSON, como ele estende as capacidades do JSON e as principais diferenças entre BSON e JSON. Além disso, inclui como Apidog lida com isso automaticamente. Ele também mostra exemplos de operações CRUD básicas e comandos de banco de dados usando Apidog para interagir com o MongoDB.
O que é BSON no MongoDB?
BSON (Binary JSON) é o formato de dados primário usado em bancos de dados MongoDB. Algumas coisas importantes a saber sobre BSON no MongoDB:
- BSON é uma representação binária de documentos JSON. Ele estende o JSON com tipos de dados adicionais, como datas, timestamps, dados binários, etc.
- O MongoDB armazena todos os dados internamente como BSON. Quando você insere um documento no MongoDB, ele é primeiro convertido em BSON antes de ser gravado no disco.
- BSON codifica informações de tipo e comprimento, permitindo que o MongoDB escaneie e percorra documentos de forma eficiente sem examinar e interpretar cada um. Isso melhora o desempenho.
- BSON é projetado para ser leve, percorrível e eficiente para codificação/decodificação. Isso o torna bem adequado como um formato de armazenamento e intercâmbio de dados para o MongoDB.
- A extensão de arquivo padrão para arquivos BSON é .bson. Ferramentas do Mongo, como Mongoexport, podem ser usadas para exportar dados do MongoDB para BSON para backups ou migrações.
- BSON é projetado para ser altamente percorrível. Consultas do MongoDB utilizam índices para localizar e recuperar rapidamente resultados sem escanear cada documento.
Estrutura de um Documento BSON
BSON (Binary JSON) é uma serialização codificada em binário de documentos semelhantes a JSON usados em bancos de dados MongoDB. Um documento BSON contém pares de campo-valor ordenados, semelhantes a objetos JSON.
Os campos podem ser quaisquer strings UTF-8 válidas, enquanto os valores podem ser um dos vários tipos de dados BSON, como string, inteiro, double, dados binários, array, documento, booleano, data, nulo, etc. A estrutura de um documento BSON começa com um inteiro de 4 bytes indicando o tamanho total do documento.
Em seguida, há um par de campo-valor contendo o campo "_id", que identifica exclusivamente o documento. O conteúdo do documento segue com cada par de campo-valor codificado em um formato binário específico com base no tipo de dado.
Um exemplo mostrando a estrutura de um documento BSON:
// Documento BSON de exemplo
{
_id: ObjectId("507f1f77bcf86cd799439011"), // ID único de 12 bytes
name: "John Doe", // String
age: 35, // Inteiro
address: { // Documento embutido
street: "123 Main St",
city: "Anytown",
state: "CA"
},
hobbies: ["reading", "hiking","swimming"], // Array
graduated: true, // Booleano
birthday: ISODate("1980-05-15T00:00:00Z"), // Data
data: BinData(0, "SGVsbG8gV29ybGQ="), // Dados binários
ts: Timestamp(1590583045633, 1) // Timestamp
}
Coisas importantes a notar:
- O campo
_id
identifica exclusivamente o documento - Os pares de campo-valor têm uma ordem definida
- Suporta tipos de dados extras como ISODate, ObjectId, etc.
- Pode embutir documentos e arrays
- Dados binários armazenados de forma eficiente
Qual é a diferença entre JSON e BSON?
Aqui estão as principais diferenças entre JSON e BSON:
- Codificação: JSON é baseado em texto e codificado em UTF-8, enquanto BSON é codificado em binário.
- Tipos de dados: JSON suporta tipos de dados limitados como strings, números, booleanos, arrays e objetos. BSON suporta tipos adicionais, como datas, dados binários, expressões regulares, etc.
- Eficiência: A codificação binária BSON permite um armazenamento e busca de dados mais eficientes em comparação com JSON. Documentos BSON têm um prefixo de comprimento e não contêm espaços em branco, permitindo que sejam analisados mais rapidamente.
- Ordenação: Os pares de campo-valor em documentos BSON são ordenados, permitindo uma travessia e indexação eficientes. Objetos JSON não têm garantias de ordenação.
- Flexibilidade: BSON fornece alguma flexibilidade sobre JSON, como permitir que nomes de campos contenham caracteres especiais e Unicode.
- Uso: JSON é um formato geral utilizado amplamente na web e em aplicações. BSON é usado especificamente em bancos de dados MongoDB como a principal representação de dados.
- Esquema: JSON não tem esquema por padrão, enquanto o MongoDB permite aplicar esquemas para documentos BSON através de regras de validação.
- Valores nulos: JSON tem um único valor nulo. BSON distingue entre nulos e campos ausentes.
Conversão JSON e BSON no MongoDB com Apidog
Apidog é um kit de ferramentas de API que simplifica o desenvolvimento de APIs. Ele oferece o MongoDB como uma de suas opções de banco de dados integradas. Ao usar o MongoDB com Apidog, você pode armazenar mocks e testes de API no MongoDB como o backend.
As respostas de API mockadas fornecidas pelo Apidog podem ser impulsionadas por dados armazenados em um banco de dados MongoDB. Isso permite que o Apidog utilize o MongoDB como a fonte de dados persistente para APIs mockadas. Em seguida, explicaremos a relação entre JSON e BSON com você.
O MongoDB armazena dados como documentos BSON, que podem ser vistos como um superconjunto do JSON. Ao operar o banco de dados MongoDB com Apidog, o JSON é usado para compor o conteúdo. O Apidog irá automaticamente mapear cada campo para o tipo de dado BSON correspondente com base no conteúdo JSON real.
Um caso especial é o campo _id
. De acordo com as convenções do MongoDB, cada documento deve ter um campo _id
como a chave primária, com ObjectId
como o tipo de dado padrão em vez de string
.
Com o Apidog, para declarar um campo _id
do tipo ObjectId
, use o formato de string comum. Se o conteúdo da string estiver em conformidade com o formato ObjectId
, o Apidog irá automaticamente mapear para o tipo ObjectId
do BSON.
Por exemplo, no MongoDB há um documento BSON como:
Copy code
{
_id: ObjectId('654e056de3662b1c09477cc3
'),
name: "Apidog"
}
Então, para consultar este documento pelo _id
com Apidog, o JSON a ser colocado na "Condição de Consulta" seria:
Copy code
{
"_id": "654e056de3662b1c09477cc3"
}