Overview
En esta guía, aprenderá a almacenar y recuperar datos en el controlador Java de MongoDB mediante registros Java. Estos registros son un tipo de clase Java que se utiliza a menudo para modelar datos y separar la lógica de negocio de su representación.
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.
Serializar y deserializar un registro
El controlador admite de forma nativa la codificación y decodificación de registros Java para operaciones de lectura y escritura en MongoDB mediante el registro de códecs predeterminado. Este registro es un conjunto de clases llamadas códecs que definen cómo convertir, codificar y decodificar tipos Java. Obtenga más información sobre los códecs y el registro de códecs predeterminado en la guía sobre codificación de datos con códecs de tipo.
Registro de ejemplo
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 ) {}
Insertar un Registro
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));
Recuperar un registro
Puede 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]
Especifique la conversión de componentes utilizando anotaciones
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.
Ejemplo de registro anotado
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() String deviceId, String name, String deviceType ) {}
Insertar un registro anotado
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' }
Recuperar un registro anotado
Puede 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 org.bson.codecs.records.annotations paquete está obsoleto. Utilice las anotaciones equivalentes del paquete org.bson.codecs.pojo.annotations.
Operaciones con tipos recursivos
El controlador admite de forma nativa la codificación y decodificación de registros definidos recursivamente sin causar recursión en tiempo de ejecución. Esta compatibilidad se extiende a ciclos de múltiples tipos de registro en las definiciones de tipo. El siguiente código proporciona un ejemplo de 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...]]
Recuperar el códec de registro
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.