#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