0

我正在尝试find在 Panache 中做一个简单的操作,但我坚持使用通配符运算符。

我有:

Model.find("payload.tags.name = ?1", "tag-to")
    .stream()
    .map(m -> (Model) m)
    .collect(Collectors.toList());

我的文档看起来像这样:

{
...
payload:Object{
    swagger:"2.0"
    info:Object
    host:"petstore.swagger.io"
    basePath:"/v2"
    tags:Array[
        0:Object [
            name:"tag-to-find"
            description:"a tag i want to find"
        ]
    ]

}
}

当我尝试查找“tag-to-find”时,它可以工作,但我不知道如何使用通配符。在 mongoshell 我只是使用db.Model.find({"payload.tags.name": /ag-to-/})它并且它可以工作。

4

1 回答 1

1

您在 Mongo shell 中使用的是 JavaScript 正则表达式。您还应该能够将它与带有 Panache 的 MongoDB 一起使用。

您应该通常将正则表达式与$regex运算符一起使用,不确定 Mongo shell 如何处理它,但以下应该可以工作:

Model.list("payload.tags.name like ?1", "/tag-to/")

我使用.list()而不是find()直接返回文档列表。

这里使用的查询就是我们所说的PanacheQL查询,它将映射到 MongoDB 原生查询,您也可以直接使用原生查询(使用命名或索引参数)。

此处解释了简化查询:https ://quarkus.io/guides/mongodb-panache#simplified-queries

于 2021-01-04T17:38:53.377 回答