【问题标题】:Query JSONB columns with GORM using model使用模型使用 GORM 查询 JSONB 列
【发布时间】:2018-09-14 16:45:00
【问题描述】:

我有一个结构/模型

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

我可以在 postgres 中查询

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"}

如何针对特定键在 jsonB 列上构造查询?我找不到任何使用模型对象进行查询的文档。我知道它可能与原始查询有关,但想看看如何使用模型对象来完成它。

users := []model.User{}
db.Find(&users, map[string]interface{}{"foo": "bar"})

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

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

【问题讨论】:

  • 你试过db.Find(&users, "data @> ?", map[string]interface{}{"foo": "bar"})
  • 谢谢,我知道这确实解决了我的问题。
  • 好的,那我就添加这个作为答案:)

标签: go-gorm


【解决方案1】:

在您的示例中,您没有指定地图将过滤哪个字段。试试

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

【讨论】:

    【解决方案2】:

    你这样查询:

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

    【讨论】:

      【解决方案3】:

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

      import "gorm.io/datatypes"
      
      db.Where(datatypes.JSONQuery("data").Equals("bar", "foo")).Find(&users)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-31
        • 2021-11-29
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 2011-06-03
        相关资源
        最近更新 更多