MongoDB Academy · Lección

¿Qué es un documento BSON?

Leerá y escribirá documentos BSON en la shell de MongoDB, reconociendo tipos de campo como cadenas, números, arrays y objetos anidados.

Lección 1 de 413 pasos

¿Qué es un documento BSON? es una lección gratuita de MongoDB Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de MongoDB Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de MongoDB Academy incluye 4 lecciones en total.

JSON frente a BSON: la diferencia clave

Escribe los datos de MongoDB en el conocido formato JSON, pero se almacenan como BSON, es decir, JSON binario. Es más rápido de analizar y admite tipos más completos, como fechas y ObjectId.

La estructura de un documento BSON

Un documento BSON no es más que pares clave-valor entre llaves, como un objeto de JS. Todo documento necesita un _id, y MongoDB crea automáticamente uno único si no se especifica.

// 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 cadena, número y booleano

La mayoría de los campos tienen el mismo aspecto que en JSON: cadenas, números, valores true/false y null. Un consejo: para representar dinero, use Decimal128 y evite los errores de redondeo de coma flotante. El código muestra cómo.

// 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)
});

El tipo BSON Date

Date es un tipo BSON real, no una cadena. Esto permite ordenar y consultar intervalos de fechas de forma eficiente. Nunca almacene fechas como texto sin formato: perdería todas esas ventajas.

// 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 anidados (subdocumentos)

El valor de un campo puede ser un documento completo independiente: un documento anidado. Una dirección encaja naturalmente dentro de un usuario y puede consultarla mediante la notación de puntos.

// 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' });

Arrays en documentos BSON

Los arrays permiten que un campo contenga una lista: etiquetas, roles o incluso subdocumentos. MongoDB puede indexar cada elemento, por lo que comprobar «¿contiene esto X?» sigue siendo 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' });

Datos binarios y ObjectId

BSON también almacena datos Binary sin procesar y el ObjectId especial. Un detalle interesante: ObjectId oculta su hora de creación en sus primeros bytes, por lo que _id se ordena aproximadamente según el orden de inserción.

// 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

Límite de tamaño de los documentos: 16 MB

Cada documento tiene un límite máximo de 16 MB: es enorme para la mayoría de los datos y sirve como incentivo para un buen modelado. Para archivos más grandes, como vídeos, use GridFS, que los divide en fragmentos.

// 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));

El esquema flexible en la práctica

MongoDB no impone un esquema, por lo que dos documentos de una misma colección pueden tener campos diferentes. Este esquema flexible resulta muy útil durante las primeras fases de desarrollo 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() }

Lectura de BSON en mongosh

El shell mongosh utiliza una sintaxis similar a JavaScript. Inserte un documento y guardará BSON; consulte y mostrará resultados limpios y legibles con asistentes 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')
// }

Serialización de BSON en Node.js

Con el controlador de Node.js solo tiene que usar objetos normales de JS: el controlador se encarga de la conversión a BSON. Nunca tendrá que crear datos binarios manualmente; los números y las fechas funcionan sin más.

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);

Comprobación rápida

Compruebe su comprensión de los conceptos de MongoDB y las bases de datos NoSQL de esta lección.

Resumen de la lección

Ha aprendido que BSON amplía JSON con tipos más completos, que los documentos pueden contener subdocumentos y arrays y que el esquema es flexible. A continuación: colecciones frente a tablas SQL.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «¿Qué es un documento BSON?» es gratis?

Sí — el texto completo de «¿Qué es un documento BSON?» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de MongoDB Academy, actualiza a CoddyKit PRO. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué aprenderé en «¿Qué es un documento BSON?»?

Leerá y escribirá documentos BSON en la shell de MongoDB, reconociendo tipos de campo como cadenas, números, arrays y objetos anidados. Practicas MongoDB Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar MongoDB Academy?

No se requiere experiencia previa. MongoDB Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «¿Qué es un documento BSON?»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de MongoDB Academy?

Sí. Cada lección de MongoDB Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ¿Qué es un documento BSON?
  2. Colecciones frente a tablas SQL
  3. Bases de datos, colecciones y espacios de nombres
  4. Conceptos esenciales de la shell mongosh
← Volver a MongoDB Academy