在gorm中,如何转义postgres中的`?`运算符?

问题描述 投票:0回答:1

假设我有一个表“testing”,其中有一列“agents”,类型为

jsonb
,用于存储代理名称数组

> SELECT * FROM testing;
+--------------------------------------+---------------------+
| id                                   | agents              |
|--------------------------------------+---------------------|
| 018d17a4-5418-1f87-f702-3ed8325f4d11 | ["mikel", "arsene"] |
+--------------------------------------+---------------------+

我可以使用

?
运算符来查找将字符串作为代理之一的记录。

> SELECT * FROM testing WHERE agents ? 'mikel'
+--------------------------------------+---------------------+
| id                                   | agents              |
|--------------------------------------+---------------------|
| 018d17a4-5418-1f87-f702-3ed8325f4d11 | ["mikel", "arsene"] |
+--------------------------------------+---------------------+

但是,在 gorm 中,

?
也充当占位符。所以我无法将查询形成为

query := `SELECT * FROM testing WHERE agents ? ?
gorm.Raw(query, 'mikel')

将生成原始查询

SELECT * FROM testing WHERE agents 'mikel' ? 

我知道我可以使用

@>
运算符来实现此目的,但我想知道如何具体使用
?
运算符

postgresql go jsonb go-gorm
1个回答
0
投票

GORM 有相应的软件包:https://github.com/go-gorm/datatypes#json

正如文档所述,您的代码应该如下所示:

import "gorm.io/datatypes"

err := db.Raw(
    `SELECT * FROM testing WHERE ? AND foo = 'bar'`, 
    datatypes.JSONQuery("agents").HasKey("mikel"),
  ).
    Scan(...).
    Error

这给出了查询:

SELECT * FROM testing WHERE "agents"::jsonb ? 'mikel' AND foo = 'bar'
© www.soinside.com 2019 - 2024. All rights reserved.