#java #mongodb #quarkus #quarkus-panache
Вопрос:
При использовании Quarkus с щегольством я очень расстраиваюсь, так как хочу понять, как он работает, но не могу, так как он не подходит для отладки. Некоторые вещи здесь написаны слишком абстрактно, и я хочу просто писать запросы panache без глубокого знания panache, синтаксического анализатора BSON, драйвера MongoDB, mongodb,… реализаций.
- Могу ли я использовать коллекцию на
status in ?1
? - Как отлаживать запросы? Иногда я получаю пустой результат по аналогичному запросу, например
status in ?1
, но не знаю, почему - Может ли кто-нибудь привести примеры для обычных операторов, таких как
AND
,OR
,IN
,EQUALS
,GREATER THAN
,…? - Как индексировать поля из кода.
Есть много других примеров переполнения стека, которым я даже больше не могу следовать, так как я не знаю, как писать и знать эти обычаи. Это просто больше не выглядит простым. Я пытаюсь с месяца заставить свое приложение работать на производстве, но всегда терплю неудачу на уровне базы данных. Пожалуйста, помогите лучше понять щегольство.
Ответ №1:
С помощью MongoDB с изяществом вы можете писать запросы в двух стилях:
- PanacheQL, который является подмножеством JPQL (языка запросов JPA), языка запросов, очень близкого к предложению WHERE SQL-запроса.
- Собственный запрос MongoDB, для удобства JSON может быть написан с одинарной кавычкой вместо двойной кавычки.
Самый простой, конечно, PanacheQL, при использовании собственного запроса MongoDB вы можете использовать всю мощь языка запросов MongoDB (но вам нужно будет написать запрос JSON).
Если вы используете PanacheQL, вы можете проверить сгенерированный запрос, установив уровень журнала ОТЛАДКИ для регистратора io.quarkus.mongodb.panache.runtime
, как описано в руководстве по отладке запросов.
В руководстве есть несколько примеров запросов PanacheQL, если вы считаете, что следует добавить больше, пожалуйста, откройте запрос на расширение с каким-либо примером, который вы хотели бы добавить (или даже PR !).
Чтобы ответить на ваши вопросы, касающиеся запросов
Могу ли я использовать коллекцию по статусу в ?1?
Да, это поддерживается.
Как отлаживать запросы?
Вы можете включить ведение журнала запросов и воспроизвести тот же запрос непосредственно в MongoDB (используя оболочку mongo или любой пользовательский интерфейс MongoDB).
Может ли кто-нибудь привести примеры для обычных операторов, таких как И, ИЛИ, В, РАВНО, БОЛЬШЕ, ЧЕМ,…?
В разделе Упрощенные запросы приведены примеры, и мы предоставляем список поддерживаемых операторов, среди которых И, ИЛИ (но вы не можете смешивать оба), В,=,>=, >.. Для всех них нет примера, но вы можете найти множество примеров предложения SQL WHERE с ними.
Вот несколько примеров (не протестированы)
People.list("name = ?1 and country = ?2", "Doe", "France");
People.list("name = ?1 or country = ?2", "Doe", "France");
People.list("age >= ?1 or cage <= ?2", 10, 60);
People.list("country in ?1", List.of("France", "Germany"));
Как индексировать поля вне кода
Если вы говорите об автоматическом создании индекса MongoDB, он не поддерживается. Однако существует запрос на расширение для его поддержки или, в более общем плане, для поддержки миграции базы данных MongoDB.
Комментарии:
1. thx, не могли бы вы также рассказать мне, как ограничить собственные запросы? в настоящее время я не понимаю, как писать
Document
запросы, поэтомуBasicDBObject
вместо этого я использую для генерацииjson
.2.
Document
это удобный класс, предоставляемый драйвером Java MongoDB для создания документа BSON. Вы можете использовать его очень легко, например, для создания BSON{"field": "value"}
, который вы можете сделатьnew Document().append("field", "value");
.3. A Хорошо, что в документации отсутствует, как использовать
Document
s. У вас есть какая-нибудь хорошая ссылка, где я могу посмотреть, как их использовать, например, регулярное выражение, сортировка и т. Д. ?4. Чтобы понять, как использовать документ MongoDB, лучше всего обратиться к справочной документации по драйверам MongoDB: mongodb.github.io/mongo-java-driver/4.2/driver/tutorials/…
5. после нескольких дней инвестирования в регулярное выражение я не мог заставить его работать без серьезных обходных путей. поскольку регулярное
$regex
выражение поставляется с двойными кавычками. Поэтому в настоящее время мне нужно преобразовать мой запрос в json, а затем я использую другое регулярное выражение, чтобы удалить кавычки из моего сгенерированного запроса. Это некрасиво. кроме того, когда я использую функции документа mongo, такие какgte("age", 55)
тогда, он не работает, в то время какnew Document("$gte", age)
работает ручная работа. Я чувствую себя немного одиноким, используя кваркус. Я борюсь с таким количеством библиотек, которые фреймворк должен лучше абстрагировать и объяснять.