在 Mongodb 中存储 protobuf java 对象的直接方法?

ILA*_*APE 1 protocol-buffers mongodb mongodb-java proto protobuf-java

当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后从数据库中读回它。

我用它来将此类消息存储在 Mongodb 中。在研究这个问题时,我找不到方法,所以决定在这里询问。

gly*_*ing 8

您可以将 Protobufs Java 类转换为 JSON,然后从 JSON 转换为 an org.bson.Document,然后编写文档并在读取时反转该转换。

有关更多详细信息,请参阅JsonFormat 。

这是写入端的一个简单示例:

YourProtobufsClass anInstance = YourProtobufsClass.getDefaultInstance();

String json = JsonFormat.printer().print(yourProtobufsClass); 

Document document = Document.parse(json);

mongoClient.getDatabase(...).getCollection(...).insertOne(document);
Run Code Online (Sandbox Code Playgroud)

这是读取端的一个简单示例:

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();
}
Run Code Online (Sandbox Code Playgroud)