Overview
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.
Serializar y deserializar un registro
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.
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
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]
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
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.
Operaciones con tipos recursivos
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...]]
Recuperar el registro Codec
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.