Простой способ хранить Protobuf Java-объект в Mongodb? - PullRequest
0 голосов
/ 30 сентября 2018

Когда необходимо сохранить сообщение protobuf3, поступающее в форме экземпляра Java (из сгенерированного класса java), лучшим вариантом является сохранение самого объекта и позднее для его считывания из базы данных.

Я использую его для хранения таких сообщений в Mongodb.Разрабатывая это, я не мог найти способ, поэтому решил спросить здесь.

1 Ответ

0 голосов
/ 01 октября 2018

Вы можете преобразовать класс Java Protobufs в 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();
}
...