Docs 菜单
Docs 主页
/ / /
java sync
/ /

文档数据格式:记录

在此页面上

  • Overview
  • 对记录进行序列化和反序列化
  • 记录示例
  • 插入记录
  • 检索记录
  • 使用注释指定组件转换
  • 带注释的记录示例
  • 插入注释记录
  • 检索注释记录

在本指南中,您可以了解如何使用 Java 记录在 MongoDB Java 驱动程序中存储和检索数据。Java 记录是一种 Java 类,通常用于对数据建模并将业务逻辑与数据表示分开。

提示

您可以在 Java 16 或更高版本中声明 Java 记录。有关记录功能和限制的详情,请参阅 Java 17 语言更新:记录类别

如果您使用的是早期版本的Java,则可以改用普通的旧Java对象。 有关实施详情,请参阅文档数据格式:POJO指南。

该驱动程序本身支持使用默认编解码器注册表对 MongoDB 读写操作的 Java 记录进行编码和解码。默认编解码器注册表是称为编解码器的类的集合,它们定义如何转换编码和解码 Java 类型。在编解码器指南中了解有关编解码器和默认编解码器注册表的详情。

本部分的代码示例引用了以下示例记录,其中描述了数据存储设备:

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

您可以插入 DataStorageRecord 实例,如以下代码所示:

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

如以下代码所示,您可以按 DataStorageRecord 实例检索文档并打印:

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]

本部分描述可用于配置记录组件序列化行为的注释,并提供示例来演示注释行为。

提示

org.bson.codecs.records.annotations 包已弃用。请使用 org.bson.codecs.pojo.annotations 包中的相应注释。

您可对记录组件使用以下注释:

注解名称
说明
BsonId
以 _id 属性指定要序列化的组件。
BsonProperty
将记录组件转换为 BSON 时,指定自定义文档字段名称。接受字段名作为参数。
BsonRepresentation
如果有别于记录组件类型,需指定要存储的 BSON 类型。接受 BSON 类型作为参数。

本部分的代码示例引用以下示例记录,其中描述了网络设备:

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
)
{}

您可以插入 DataStorageRecord 实例,如以下代码所示:

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

在 MongoDB 中插入的文档应类似于以下内容:

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

如以下代码所示,您可以按 NetworkDeviceRecord 实例检索文档并打印:

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]

后退

文档数据格式:POJO