Запрос столбцов JSONB с помощью GORM с использованием модели - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть структура / модель

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

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы делаете запрос так:

users := []model.User{}
db.Where("data ->> 'foo' = ?", "bar").Find(&users)
0 голосов
/ 29 сентября 2018

В вашем примере вы не указываете, какое поле карта будет фильтровать. Попробуйте

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