Rumah >pembangunan bahagian belakang >Golang >gorm postgres bertanya elemen dalam tatasusunan json
gorm postgres Menanyakan elemen dalam tatasusunan json ialah keperluan biasa, terutamanya apabila berurusan dengan struktur data yang kompleks. Apabila menggunakan GORM untuk pertanyaan pangkalan data, kami boleh mencapai matlamat ini melalui beberapa teknik. Dalam artikel ini, kami akan menunjukkan kepada anda cara untuk menanyakan elemen dalam tatasusunan json menggunakan pangkalan data GORM dan Postgres. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberikan anda panduan terperinci untuk membantu anda menyelesaikan masalah ini dengan mudah. Mari mulakan!
Dalam projek golang saya, saya menggunakan postgres dengan gorm dan saya mempunyai lajur atribut yang mengandungi json berikut:
{"email": ["[email protected]", "[email protected]", "[email protected]"], "mail_folder": "some_folder"} {"email": ["[email protected]", "[email protected]", "[email protected]"], "mail_folder": "some_folder"}
Jadi saya perlu mendapatkan rekod yang mengandungi e-mel [email protected]
yang merupakan rekod pertama. Saya boleh mengekstraknya menggunakan sql tulen dalam editor sql menggunakan pertanyaan berikut:
select * from authors a where attributes @> '{"email": ["[email protected]"]}';
Tetapi dalam gorm saya terus mendapat ralat sintaks json dan lain-lain. Saya cuba menggunakan pertanyaan mentah() atau menggunakan
Where(fmt.Sprintf("attributes ->> 'email' = '[\"%v\"]'", email)).
Tetapi ia tidak berkesan juga. Sebarang idea tentang cara membetulkannya adalah dialu-alukan. Terima kasih.
sampledb dalam postgresql:
create table authors ( id serial, dummy text, attributes jsonb ); insert into authors (dummy, attributes) values ('eee', '{ "email": [ "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="0762626247646464296464">[email protected]</a>", "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="bccececefcdedede92dfdf">[email protected]</a>", "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="5d2929291d3e3e3e732727">[email protected]</a>" ], "mail_folder": "some_folder" }'), ('zzz', '{ "email": [ "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="0e7474744e6d6d6d206d6d">[email protected]</a>", "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="b3d2d2d2f3d1d1d19dd0d0">[email protected]</a>", "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="a7c5c5c5e7c4c4c489dddd">[email protected]</a>" ], "mail_folder": "some_folder" }');
Ini berfungsi dengan baik:
package main import ( "fmt" postgres2 "github.com/jinzhu/gorm/dialects/postgres" "gorm.io/driver/postgres" "gorm.io/gorm" "log" ) var ( dsn = "host=localhost user=postgres password=secret dbname=sampledb port=5432 sslmode=disable TimeZone=europe/istanbul" ) type Author struct { Id int `gorm:"primaryKey"` Dummy string Attributes postgres2.Jsonb `gorm:"type:jsonb;default:'{}'"` } var DB *gorm.DB func main() { DB = initDb() listAuthors() } func listAuthors() { var authors []Author DB.Find(&authors, "attributes @> '{\"email\": [\"<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="95f0f0f0d5f6f6f6bbf6f6">[email protected]</a>\"]}'") for _, a := range authors { fmt.Printf("%d %s %s\n", a.Id, a.Dummy, a.Attributes) } } func initDb() *gorm.DB { db, err := gorm.Open(postgres.Open(dsn)) if err != nil { log.Fatal("couldn't connect to db") } return db }
Untuk cetakan data sampel:
1 eee {{"email": ["[email protected] ", "[email protected]", "[email protected]"], "mail_folder": "some_folder"}}
Atas ialah kandungan terperinci gorm postgres bertanya elemen dalam tatasusunan json. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!