Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Formato de datos del documento: registros

En esta guía, puedes aprender a almacenar y recuperar datos en el MongoDB Java Driver usando registros Java. Los registros Java son un tipo de clase Java que a menudo se utiliza para modelar datos y separar la lógica empresarial de la representación de datos.

Tip

Puedes declarar registros Java en Java 16 o posterior. Aprende más sobre la funcionalidad y las restricciones de los registros en Actualizaciones de Java 17 Lenguaje: Clase Registro.

Si estás utilizando una versión anterior de Java, puedes utilizar objetos Java comunes en su lugar. Revisa la guía Formato de datos de documentos: POJOs para obtener detalles sobre la implementación.

Nota

Si utilizas el driver en un contenedor OSGi y tu aplicación emplea el driver para codificar o decodificar registros Java, debes agregar una dependencia explícita al módulo org.bson.codecs.record. Obtén más información sobre la definición de dependencias para los contenedores OSGi en la documentación de IBM OSGi.

El driver admite de forma nativa la codificación y decodificación de registros de Java para las operaciones de lectura y guardar de MongoDB utilizando el registro de códecs por defecto. El registro de códecs por defecto es una colección de clases llamadas códecs que definen cómo convertir Java tipos mediante codificación y decodificación. Aprenda más sobre los códecs y el registro de códecs por defecto en la guía Codificación de datos con códecs de tipo.

Los ejemplos de código en esta sección hacen referencia al siguiente registro de muestra, que describe un dispositivo de almacenamiento de datos:

public record DataStorageRecord(
String productName,
double capacity
) {}

Puedes insertar una instancia de DataStorageRecord como se muestra en el siguiente código:

MongoCollection<DataStorageRecord> collection = database.getCollection("data_storage_devices", DataStorageRecord.class);
// insert the record
collection.insertOne(new DataStorageRecord("2TB SSD", 1.71));

Puedes recuperar documentos como instancias DataStorageRecord e imprimirlos como se muestra en el siguiente código:

MongoCollection<DataStorageRecord> collection = database.getCollection("data_storage_devices", DataStorageRecord.class);
// retrieve and print the records
List<DataStorageRecord> records = new ArrayList<DataStorageRecord>();
collection.find().into(records);
records.forEach(System.out::println);
DataStorageRecord[productName=1TB SSD, capacity=1.71]

Esta sección describe cómo configurar el comportamiento de serialización de los componentes de registros utilizando anotaciones. Para obtener una lista completa de anotaciones compatibles, consulte la documentación API del paquete org.bson.codecs.pojo.annotations.

Nota

El controlador admite anotaciones para registros de Java, pero solo si las incluyes cuando defines el componente, como se muestra en el siguiente ejemplo de registro. No puedes usar las anotaciones dentro del constructor de registros.

Los ejemplos de código de esta sección hacen referencia al siguiente registro de muestra, que describe un dispositivo de red:

import org.bson.BsonType;
import org.bson.codecs.pojo.annotations.BsonProperty;
import org.bson.codecs.pojo.annotations.BsonId;
import org.bson.codecs.pojo.annotations.BsonRepresentation;
public record NetworkDeviceRecord(
@BsonId()
@BsonRepresentation(BsonType.OBJECT_ID)
String deviceId,
String name,
@BsonProperty("type")
String deviceType
)
{}

Puedes insertar una instancia de DataStorageRecord como se muestra en el siguiente código:

MongoCollection<NetworkDeviceRecord> collection = database.getCollection("network_devices", NetworkDeviceRecord.class);
// insert the record
String deviceId = new ObjectId().toHexString();
collection.insertOne(new NetworkDeviceRecord(deviceId, "Enterprise Wi-fi", "router"));

El documento insertado en MongoDB se asemeja a lo siguiente:

{
_id: ObjectId("fedc..."),
name: 'Enterprise Wi-fi',
type: 'router'
}

Puedes recuperar documentos como instancias NetworkDeviceRecord e imprimirlos como se muestra en el siguiente código:

MongoCollection<NetworkDeviceRecord> collection = database.getCollection("network_devices", NetworkDeviceRecord.class);
// return all documents in the collection as records
List<NetworkDeviceRecord> records = new ArrayList<NetworkDeviceRecord>();
collection.find().into(records);
records.forEach(System.out::println);
NetworkDeviceRecord[deviceId=fedc..., name=Enterprise Wi-fi, deviceType=router]

Nota

El paquete org.bson.codecs.records.annotations está en desuso. En su lugar, utiliza las anotaciones equivalentes del paquete org.bson.codecs.pojo.annotations.

El controlador es compatible de forma nativa con la codificación y decodificación de registros definidos de forma recursiva, sin causar recursión en tiempo de ejecución. Este soporte se extiende a ciclos de múltiples tipos de registros en definiciones de tipos. El siguiente código proporciona un ejemplo de un diseño de registro recursivo:

public record RecordTree(
String content,
RecordTree left,
RecordTree right
) {}

Puede realizar operaciones de lectura y escritura en registros definidos recursivamente de la misma manera que lo haría para otros registros. El siguiente código muestra cómo puede ejecutar una operación de búsqueda en una colección de tipos de RecordTree:

MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<RecordTree> collection = database.getCollection("myCollection", RecordTree.class);
Bson filter = Filters.eq("left.left.right.content", "Ikatere");
collection.find(filter).forEach(doc -> System.out.println(doc));
RecordTree[content=Ranginui, left=RecordTree[content=..., left=RecordTree[content=..., right=RecordTree[content=Ikatere...]]

Puedes usar el RecordCodecProvider para recuperar el códec de registros. Debes usar esta interfaz cuando quieras personalizar el código para codificar y decodificar objetos de registro Java hacia y desde sus BSON types correspondientes, al mismo tiempo que minimizas la duplicación de código. Para obtener más información sobre los códecs y su uso, consulta Códecs.

No puedes crear un códec de registros directamente, pero puedes usar el RecordCodecProvider para implementar el códec de registros en tu código. Para obtener más información sobre el RecordCodecProvider, consulte la documentación de la API.