在 Mongodb 中存储 protobuf java 对象的直接方法?
Straightforward way to store protobuf java object in Mongodb?
当需要存储以 Java 实例形式出现的 protobuf3 消息时(来自生成的 java class),最好的选择是存储对象本身和稍后从数据库中读回它。
我用它来将此类消息存储在 Mongodb 中。
在调查这个问题时,我找不到办法,所以决定在这里问一下。
您可以将 Protobufs Java class 转换为 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();
}
当需要存储以 Java 实例形式出现的 protobuf3 消息时(来自生成的 java class),最好的选择是存储对象本身和稍后从数据库中读回它。
我用它来将此类消息存储在 Mongodb 中。 在调查这个问题时,我找不到办法,所以决定在这里问一下。
您可以将 Protobufs Java class 转换为 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();
}