Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

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 de Java en Java 16 o posterior. Conoce más sobre la funcionalidad y restricciones de los registros de Actualizaciones del lenguaje Java 17: Clases de registro.

Si usas una versión anterior de Java, puedes usar objetos Java tradicionales en su lugar. Ver el Formato de datos del documento: POJOs guía para detalles de implementación.

Nota

Si está utilizando el controlador en un contenedor OSGi y su aplicación usa el controlador para codificar o decodificar registros Java, debe agregar una dependencia explícita en el org.bson.codecs.record módulo. Obtén más información sobre cómo definir dependencias para contenedores OSGi en la documentación de OSGi de IBM.

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.

Volver

Personalización de POJO

En esta página