【问题标题】:Quarkus Panache Mongodb possible queriesQuarkus Panache Mongodb 可能的查询
【发布时间】:2021-05-11 09:48:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: java mongodb quarkus quarkus-panache


    【解决方案1】:

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

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

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

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

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

    回答有关查询的问题

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

    是的,这是受支持的。

    如何调试查询?

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

    谁能提供常用运算符的示例,如 AND、OR、IN、EQUALS、GREATER THAN、...?

    Simplified queries 部分有示例,我们提供了支持的运算符列表,其中包括 AND、OR(但不能同时使用)、IN、=、>=、

    这里有一些样本(未测试)

    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 索引,则不支持它。但是有 enhancement request 支持它,或者更普遍地支持 MongoDB 数据库迁移。

    【讨论】:

    • thx,你能告诉我如何限制原生查询吗?目前我不知道如何编写Document 查询,所以我使用BasicDBObject 来生成json
    • Document 是一个便利类,由 MongoDB Java 驱动程序提供,用于创建 BSON 文档。你可以很容易地使用它,例如创建一个 BSON {"field": "value"} 你可以做new Document().append("field", "value");
    • 如何使用Documents 的文档中缺少的一个好的。你有什么好的链接,我可以看到如何使用这些,例如正则表达式、排序等...?
    • 要了解如何使用MongoDB Document,最好的地方是MongoDB驱动参考文档:mongodb.github.io/mongo-java-driver/4.2/driver/tutorials/…
    • 在投资 regex 几天后,如果没有大量的解决方法,我无法使其工作。因为正则表达式 $regex 带有双引号。所以目前我需要将我的查询转换为 json,然后我使用另一个正则表达式从我生成的查询中删除引号。那是丑陋的。同样,当我使用像 gte("age", 55) 这样的 mongo 文档功能时,它也不起作用,而像 new Document("$gte", age) 这样的手动功能起作用。我觉得使用 quarkus 有点孤单。我与这么多库作斗争,框架应该更好地抽象和解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2020-12-24
    • 2021-11-26
    • 2022-06-22
    • 2021-07-05
    • 2023-01-13
    • 1970-01-01
    相关资源
    最近更新 更多