MongoDB преобразует документы в пользовательские типы
Есть ли какой-нибудь способ чтения значений MongoDB для объектов моего типа, без преобразования их из SimpleDBObject?
Я пытался получить все документы из коллекции с coll.find()
но когда я перебираю их, я получаю
Не удается найти кодек для интерфейса com.mynamespace.models.interfaces.Profile.
Какой правильный путь? Я использую стандартный драйвер Java.
Насколько я помню, в C# и Couchbase я просто писал / читал документы в свои пользовательские типы. Что здесь?
3 ответа
То, что я использовал в прошлом, это Монго Джек. Это обеспечивает простую оболочку, которая, согласно их документации, напрямую отображает POJO из потока Mongo без посредника SimpleDBObject. Здесь также используется библиотека Джексона, поэтому вы можете использовать аннотации сериализации и десериализации Джексона.
Вот что говорит сайт:
Десериализует запрашиваемые объекты непосредственно из потока MongoDB, что делает его одним из (если не самым) самым быстрым преобразователем объектов для MongoDB.
Возможно, это то, что вы ищете, да?
Вот пример с сайта:
JacksonDBCollection<MyObject, String> coll = JacksonDBCollection.wrap(dbCollection, MyObject.class,
String.class);
MyObject myObject = ...
WriteResult<MyObject, String> result = coll.insert(myObject);
String id = result.getSavedId();
MyObject savedObject = coll.findOneById(id);
Новая инфраструктура кодеков в mongo-java-driver >= 3.0 в значительной степени делает то, что вы хотите. Вы должны создать кодеки вручную, но также было предпринято несколько попыток создать кодеки автоматически.
Существуют также другие полнофункциональные ODM-инфраструктуры, такие как Morphia и Spring Data MongoDB.
Morphia является официально поддерживаемым ODM для MongoDB и Java. Пользовательские кодеки могут быть написаны для ваших объектов Java, чтобы сериализация была в значительной степени прозрачной для вашего приложения. Spring data и mongojack также являются отличным выбором. Spring-данные активно поддерживаются, хотя я не совсем уверен, насколько активно развивается mongojack в наши дни.