PanacheMongo 使用通配符查找

PanacheMongo find with wildcard

我想在 Panache 中做一个简单的 find,但我被通配符所困。

我有:

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-/}) 就可以了。

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

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

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

我使用 .list() 而不是 find() 因为它直接 return 文件列表。

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

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