MongoDB Academy · Aula

O que é um documento BSON?

Leia e escreva documentos BSON no shell do MongoDB, reconhecendo tipos de campos como strings, números, matrizes e objetos aninhados.

Aula 1 de 413 etapas

O que é um documento BSON? é uma aula grátis de MongoDB Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de MongoDB Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de MongoDB Academy inclui 4 aulas no total.

JSON versus BSON: a diferença fundamental

Você escreve dados do MongoDB como JSON familiar, mas eles são armazenados como BSON — JSON binário. Ele é mais rápido de percorrer e oferece suporte a tipos mais avançados, como datas e ObjectId.

A estrutura de um documento BSON

Um documento BSON é simplesmente formado por pares de chave e valor entre chaves, como um objeto JS. Todo documento precisa de um _id, e o MongoDB cria automaticamente um identificador exclusivo se você não o informar.

// A minimal MongoDB document
{
  _id: ObjectId('64a2f3b1c9e7e12345678901'),
  name: 'Alice',
  age: 30,
  active: true
}
// _id is auto-generated if omitted on insert
// ObjectId encodes the insert timestamp in its first 4 bytes

Campos de texto, número e booleano

A maioria dos campos se parece com JSON: textos, números, verdadeiro/falso e nulo. Uma dica: para valores monetários, use Decimal128 para evitar erros de arredondamento de ponto flutuante. O código mostra como fazer isso.

// Explicit BSON number types in mongosh
db.products.insertOne({
  name: 'Widget',
  quantity: NumberInt(100),       // 32-bit integer
  price: NumberDecimal('9.99'),   // Exact decimal for money
  weight: 0.45                    // Double (64-bit float)
});

O tipo BSON Date

Date é um tipo BSON real, não um texto. Isso permite ordenar e consultar intervalos de datas com eficiência. Nunca armazene datas como texto simples — você perderia tudo isso.

// Always use BSON Date, not strings
db.events.insertOne({
  title: 'Conference',
  startDate: new Date('2024-09-01'),   // BSON Date
  endDate: ISODate('2024-09-03T18:00:00Z')
});

// Range query works perfectly on Date fields:
db.events.find({ startDate: { $gte: new Date('2024-01-01') } });

Documentos aninhados (subdocumentos)

O valor de um campo pode ser um documento completo independente — um documento aninhado. Um endereço se encaixa naturalmente dentro de um usuário, e você pode consultá-lo usando a notação de ponto.

// Nested sub-document example
{
  _id: ObjectId('...'),
  name: 'Bob',
  address: {
    street: '123 Main St',
    city: 'Chicago',
    state: 'IL',
    zip: '60601'
  },
  employer: {
    name: 'Acme Corp',
    since: ISODate('2020-03-01')
  }
}

// Query by nested field:
db.users.find({ 'address.city': 'Chicago' });

Matrizes em documentos BSON

As matrizes permitem que um campo contenha uma lista — etiquetas, funções ou até subdocumentos. O MongoDB pode indexar cada elemento, portanto verificar "isso contém X?" continua sendo rápido.

// Document with arrays of primitives and sub-documents
{
  _id: ObjectId('...'),
  productName: 'Smart TV',
  tags: ['electronics', '4K', 'HDR'],
  reviews: [
    { user: 'alice', rating: 5, comment: 'Love it!' },
    { user: 'bob',   rating: 4, comment: 'Good value.' }
  ]
}

// Query: documents where tags array contains '4K'
db.products.find({ tags: '4K' });

Dados binários e ObjectId

O BSON também armazena dados Binary brutos e o ObjectId especial. Um truque interessante: um ObjectId oculta seu horário de criação nos primeiros bytes, portanto _id é ordenado aproximadamente pela ordem de inserção.

// Extracting timestamp from ObjectId in mongosh
const id = ObjectId('64a2f3b1c9e7e12345678901');
console.log(id.getTimestamp());
// ISODate('2023-07-03T10:15:29.000Z')

// The first 8 hex chars = 4-byte timestamp
// 64a2f3b1 = Unix epoch seconds => 2023-07-03

Limite de tamanho do documento: 16 MB

Cada documento tem um limite máximo de 16 MB — enorme para a maioria dos dados e um incentivo à boa modelagem. Para arquivos maiores, como vídeos, use GridFS, que os divide em partes.

// GridFS upload example (Node.js driver)
const { GridFSBucket } = require('mongodb');
const bucket = new GridFSBucket(db, { bucketName: 'uploads' });

const uploadStream = bucket.openUploadStream('photo.jpg');
fs.createReadStream('/tmp/photo.jpg').pipe(uploadStream);
uploadStream.on('finish', () => console.log('Uploaded:', uploadStream.id));

Esquema flexível na prática

O MongoDB não impõe um esquema, portanto dois documentos da mesma coleção podem ter campos diferentes. Esse esquema flexível é valioso durante um desenvolvimento inicial rápido.

// Two documents in the same collection with different shapes
// This is perfectly valid in MongoDB

// User with social login
{ _id: ObjectId('...'), name: 'Alice', googleId: 'g_12345', createdAt: new Date() }

// User with email/password
{ _id: ObjectId('...'), name: 'Bob', email: 'bob@test.com', passwordHash: 'bcrypt...', createdAt: new Date() }

Lendo BSON no mongosh

O shell mongosh usa uma sintaxe semelhante a JavaScript. Insira dados e ele os salvará como BSON; faça uma consulta e ele exibirá uma saída limpa e legível, com auxiliares como ObjectId e ISODate.

// mongosh: insert and read back
db.items.insertOne({ name: 'Chair', price: NumberDecimal('199.99'), createdAt: new Date() });

db.items.findOne({ name: 'Chair' });
// Output:
// {
//   _id: ObjectId('64a2f3b1...'),
//   name: 'Chair',
//   price: Decimal128('199.99'),
//   createdAt: ISODate('2024-01-15T10:23:00.000Z')
// }

Serialização BSON no Node.js

Com o controlador do Node.js, basta usar objetos JS comuns — ele cuida da conversão BSON para você. Você nunca precisa criar dados binários manualmente; números e datas simplesmente funcionam.

const { ObjectId, Decimal128 } = require('mongodb');

// JS object -> BSON automatically by the driver
const doc = {
  _id: new ObjectId(),           // BSON ObjectId
  name: 'Widget',                // BSON String
  price: Decimal128.fromString('19.99'),  // BSON Decimal128
  stock: 100,                    // BSON Double (JS default)
  createdAt: new Date(),         // BSON Date
  tags: ['sale', 'new']          // BSON Array
};
await db.collection('products').insertOne(doc);

Verificação rápida

Teste sua compreensão dos conceitos de MongoDB e bancos de dados NoSQL desta lição.

Recapitulação da lição

Você aprendeu que BSON amplia o JSON com tipos mais ricos, que os documentos podem conter subdocumentos e matrizes aninhados e que o esquema é flexível. A seguir: coleções versus tabelas SQL.

Grátis para começar

Aprenda JavaScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “O que é um documento BSON?” é grátis?

Sim — o texto completo de “O que é um documento BSON?” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de MongoDB Academy, atualize para CoddyKit PRO. O curso de MongoDB Academy inclui 4 aulas no total.

O que vou aprender em “O que é um documento BSON?”?

Leia e escreva documentos BSON no shell do MongoDB, reconhecendo tipos de campos como strings, números, matrizes e objetos aninhados. Você pratica MongoDB Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar MongoDB Academy?

Nenhuma experiência prévia é necessária. MongoDB Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “O que é um documento BSON?”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de MongoDB Academy?

Sim. Cada aula de MongoDB Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O que é um documento BSON?
  2. Coleções versus tabelas SQL
  3. Bancos de dados, coleções e espaços de nomes
  4. Fundamentos do shell mongosh
← Voltar para MongoDB Academy