gpt4 book ai didi

scala - Slick:使用 Rep[Seq[T]] 进行过滤

转载 作者:行者123 更新时间:2023-12-05 07:34:17 24 4
gpt4 key购买 nike

我正在制作 Play!我正在使用 slick 的项目(在 Scala 中)。

我在尝试过滤包含多个数组的 jsonb 列上的查询时遇到问题。

例如我的配置列包含以下 json:

{
test1: {
...
},
test2: [
{
id: ...,
bool: false
},
{
id: ...,
bool: true
}
]
}

我想查询此表并选择至少有 1 个 test2 元素具有 bool: true 的每一行。 (我们在 test2 中可能有大约 10 个元素)。

我可以逐一尝试 test2 的每个元素:

    baseQuery.filter(a => a.config+>'test2'~>0+>>'bool' === "true" ||
a.config+>'test2'~>1+>>'bool' === "true" ||
...
)

但这显然不是一个好的解决方案。

我试过:

baseQuery.filter(a => (a.config+>'test2').arrayElements[JsArray].value...
)

但是 Rep[JsArray] 没有值方法。我也试过使用

arrayElements[Seq[JsValue]]

但我最终得到了一个 Rep[Seq[JsValue]],我无法在其上映射/flatMap/exists/...

它必须保留为查询而不是 DBIOAction,因此我不必重新格式化大量代码...

感谢大家的解决方案/想法!

最佳答案

我找到了一些“hackish”解决方案来解决我的问题。我对此并不完全满意,因为我更愿意正确地迭代 Seq[JsValue] 但如果有人有同样的问题,那就是这里。

这非常简单,我使用的是 +>>运算符将我的 JsValue 作为字符串获取,然后使用 like查看它是否包含我需要设置为 true 的 bool 值。

使用与之前相同(愚蠢)的示例,解决方案是:

baseQuery.filter(_.config+>>'test2' like "%\"bool\": true%")

这可能不是最好的解决方案,但它可以满足我的需要。

关于scala - Slick:使用 Rep[Seq[T]] 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com