【发布时间】:2023-03-08 19:29:01
【问题描述】:
当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后再从数据库中读取。
我的用例是将此类消息存储在 Mongodb 中。 在调查这个的时候,我找不到办法,所以决定在这里问。
【问题讨论】:
标签: mongodb protocol-buffers mongodb-java proto protobuf-java
当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后再从数据库中读取。
我的用例是将此类消息存储在 Mongodb 中。 在调查这个的时候,我找不到办法,所以决定在这里问。
【问题讨论】:
标签: mongodb protocol-buffers mongodb-java proto protobuf-java
您可以将 Protobufs Java 类转换为 JSON,从 JSON 转换为 org.bson.Document,然后编写文档并在读取时反转该转换。
更多详情请见JsonFormat。
下面是写端的一个简单示例:
YourProtobufsClass anInstance = YourProtobufsClass.getDefaultInstance();
String json = JsonFormat.printer().print(yourProtobufsClass);
Document document = Document.parse(json);
mongoClient.getDatabase(...).getCollection(...).insertOne(document);
下面是读取端的一个简单示例:
JsonFormat.Parser parser = JsonFormat.parser();
FindIterable<Document> documents = collection.find(...);
for (Document document : documents) {
YourProtobufsClass.Builder builder = YourProtobufsClass.newBuilder();
parser.merge(document.toJson(), builder);
// now you can build an instance of your protobufs class which
// has been populated from the retrieved JSON
YourProtobufsClass anInstance = builder.build();
}
【讨论】:
No field is annotated with @Id; but it is required 和 org.mongodb.morphia.mapping.validation.ConstraintViolationException: Number of violations: 1 错误