使用模型使用GORM查询JSONB列

时间:2018-09-14 16:45:01

标签: go-gorm

我有一个结构/模型

public async Task DoSomethingAsync() 
{
    // Do some stuff
    await DoSomethingFromSomeFunction(somestuff);
}

public void DoSomething() 
{
    DoSomethingAsync().Wait();
}

我可以在postgres中查询

type User struct {
        gorm.Model
        Name string         `gorm:"unique;not null" json:"name"`
        Data postgres.Jsonb `json:"data"`
}

如何在jsonB列上为特定键构造查询?我找不到使用模型对象进行查询的任何文档。我知道它可以与原始查询一起使用,但想了解如何使用模型对象(即。)来完成它。

db=# select id,name,data from users where data @> '{"foo": "bar"}';
id | name  |       data
----+-------+------------------
6 | user01 | {"foo": "bar"}
7 | user02 | {"foo": "bar"}
8 | user03 | {"foo": "bar"}

http://gorm.io/docs/dialects.html

http://gorm.io/docs/query.html

3 个答案:

答案 0 :(得分:1)

在您的示例中,您未指定地图将过滤的字段。试试

db.Find(&users, "data @> ?", map[string]interface{}{"foo": "bar"})

答案 1 :(得分:0)

您可以像这样进行查询:

users := []model.User{}
db.Where("data ->> 'foo' = ?", "bar").Find(&users)

答案 2 :(得分:0)

我不知道这是否适用于jsonp,但是datatypes对我有用,JSON保存为字符串

Add test device