gorm postgres Das Abfragen von Elementen in einem JSON-Array ist ein häufiger Bedarf, insbesondere beim Umgang mit komplexen Datenstrukturen. Wenn wir GORM für Datenbankabfragen verwenden, können wir dieses Ziel durch einige Techniken erreichen. In diesem Artikel zeigen wir Ihnen, wie Sie Elemente in einem JSON-Array mithilfe der GORM- und Postgres-Datenbank abfragen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel detaillierte Anleitungen, die Ihnen bei der einfachen Lösung dieses Problems helfen. Lasst uns beginnen!
In meinem Golang-Projekt verwende ich Postgres mit Gorm und ich habe eine Attributspalte mit dem folgenden JSON:
{"email": ["[email protected]", "[email protected]", "[email protected]"], "mail_folder": "some_folder"} {"email": ["[email protected]", "[email protected]", "[email protected]"], "mail_folder": "some_folder"}
Ich brauche also den Datensatz mit der E-Mail [email protected]
, der der erste Datensatz ist. Ich kann es mit reinem SQL im SQL-Editor mit der folgenden Abfrage extrahieren:
select * from authors a where attributes @> '{"email": ["[email protected]"]}';
Aber in Gorm bekomme ich immer wieder schlechte JSON-Syntaxfehler usw. Ich habe versucht, die Abfrage raw() oder
zu verwendenWhere(fmt.Sprintf("attributes ->> 'email' = '[\"%v\"]'", email)).
Aber es funktioniert auch nicht. Irgendwelche Ideen, wie man das Problem beheben kann, wären willkommen. Danke.
sampledb in 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" }');
Das funktioniert gut:
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 }
Für den Beispieldatendruck:
1 eee {{"email": ["[email protected]", "[email protected]", "[email protected]"], „mail_folder“: „some_folder“}}
Das obige ist der detaillierte Inhalt vonGorm Postgres fragt Elemente im JSON-Array ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!