Проблема с обновлением Morphia до 2.0.0

#java #mongodb #kotlin #morphia

#java #mongodb #kotlin #morphia

Вопрос:

Я обновляю Morphia до версии 2.0.0 (в настоящее время 1.3.2), и у меня возникла проблема с удалением устаревшего метода CreateQuery для этого фрагмента кода, поскольку мне нужно выполнить сопоставление элементов

 val builder = BasicDBObjectBuilder.start()
        .add("items", BasicDBObject("$elemMatch", BasicDBObject("$and", arrayOf(
                BasicDBObject("shipments.correlations.id", pickupId),
                BasicDBObject("status.value", BasicDBObject("$in", ItemStatus.values().filter {
                    it.value != ItemStatus.SHIPPED.value
                }.map { it.value }))
        ))))
if (excludeOrdersIds.count() > 0) {
    builder.add("id", BasicDBObject("$nin", excludeOrdersIds))
}
return morphia.createQuery(Order::class.java, builder.get()).asList(FindOptions().limit(limit))
  

В версии 2.0.0 я не могу найти метод, который позволил бы мне выполнить сопоставление элементов или использовать DBObject, возвращаемый драйвером Mongo BasicDBObjectBuilder, как я делал в этом фрагменте кода.

Какие-нибудь советы?

Ответ №1:

Если вы обновляете каждую промежуточную версию и следуете рекомендациям, к концу вы получите гораздо более чистый результат. В версии 2.0 все использование было прекращено DBObject в пользу modern Document . Но вы действительно должны, по крайней мере, перейти к версии 1.6, поскольку там есть устаревшие версии, чтобы подготовить вас к переходу на 2.0.

Комментарии:

1. Хорошо, допустим, вместо этого я могу получить документ. Какой метод я должен использовать, чтобы взаимодействовать с ним с помощью Morphia? Прямо сейчас я перенес всю кодовую базу, кроме этого фрагмента кода. Или, есть ли какой-либо способ, которым я мог бы выполнить и выполнить elemMatch с новым Morphia напрямую?

2. elemMatch выполняется с помощью Filters.elemMatch