0

在将 Quarkus 与Panache一起使用时,我感到非常沮丧,因为我想了解它的工作原理,但不能因为它对调试不友好。有些东西在这里写得太抽象了,我希望在没有深入了解 panache、BSON 解析器、MongoDB 驱动程序、mongodb ......实现的情况下编写华丽的查询。

  1. 我可以在 上使用 Collectionstatus in ?1吗?
  2. 如何调试查询?有时我在类似查询中得到空结果,例如status in ?1但不知道为什么
  3. 有人可以为常用的运算符(如AND, OR, IN, EQUALS, GREATER THAN,...)提供示例吗?
  4. 如何从代码中索引字段。

还有许多其他关于堆栈溢出的示例,因为我不知道如何编写和了解这些用法,所以我什至无法理解。只是看起来不再简单了。从一个月以来,我一直在尝试让我的应用程序在生产环境中工作,但总是在数据库级别上失败。请帮助更多地了解panache。

4

1 回答 1

1

使用带有 Panache 的 MongoDB,您可以使用两种样式编写查询:

  1. PanacheQL,它是 JPQL(JPA 的查询语言)的子集,是一种非常接近 SQL 查询的 WHERE 子句的查询语言。
  2. 原生 MongoDB 查询,为了方便 JSON 可以用单引号代替双引号。

最简单的当然是 PanacheQL,在使用原生 MongoDB 查询时,您可以使用 MongoDB 查询语言的全部功能(但您需要编写 JSON 查询)。

如果您使用的是 PanacheQL,您可以通过将 DEBUG 日志级别设置为记录器来检查生成的查询,io.quarkus.mongodb.panache.runtime如指南的查询调试中所述。

在指南上,有一些 PanacheQL 查询示例,如果您觉得应该添加更多,请打开一个增强请求,其中包含您想要添加的一些示例(甚至是 PR !)。

回答您有关查询的问题

我可以在 ?1 中对状态使用集合吗?

是的,这是支持的。

如何调试查询?

您可以启用查询日志记录,并直接在 MongoDB 上播放相同的查询(使用 mongo shell 或任何 MongoDB UI)。

有人可以为常见的运算符提供示例,如 AND、OR、IN、EQUALS、GREATER THAN、...?

简化查询部分有示例,我们提供了支持的运算符列表,其中包括 AND、OR(但不能同时使用)、IN、=、>=、<=、...所有的例子,但你可以找到很多 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 数据库迁移。

于 2021-05-11T14:57:55.350 回答