Gorm 中的 JSONB 数据处理
使用 Gorm 管理 Postgres 中的 JSONB 数据可能会带来挑战,特别是在处理字符串片段时。以下是可用选项的详细检查:
使用 postgres.Jsonb:
Gorm 提供了一种特定类型 postgres.Jsonb,专为 JSONB 操作而设计。虽然此方法提供了一种简单的方法,但对于您希望避免使用 Gorm 特定类型的场景来说,它可能并不理想。
字符串切片:
当使用 a 定义 Go 结构体时字符串切片并尝试将其映射为 JSONB 对象,Gorm 可能会遇到困难。如果您选择此方法,则需要显式指定 sql 和 json 标记,如下所示:
type User struct { gorm.Model Data []string `sql:"type:jsonb" json:"data"` }
但是,此方法可能会在 AutoMigrate 执行期间触发恐慌。
嵌套结构:
要绕过恐慌问题,您可以将字符串切片包装在嵌套中struct:
type User struct { gorm.Model Data struct { NestedData []string } `sql:"type:jsonb" json:"data"` }
虽然此技术可以防止崩溃,但它可能无法在 Postgres 中创建预期的列。
使用 pgtype.JSONB 的替代解决方案:
首选方法涉及利用 Gorm 底层驱动程序 pgx 中可用的 pgtype.JSONB 类型。此方法无需自定义代码,并允许操作字符串切片之外的任何 JSONB 类型。
以下是如何使用 pgtype.JSONB 的示例:
type User struct { gorm.Model Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"` }
从以下位置检索数据数据库:
u := User{} db.Find(&u) var data []string _ = u.Data.AssignTo(&data)
更新数据数据库:
u := User{} _ = u.Data.Set([]string{"abc", "def"}) db.Updates(&u)
通过利用这种方法,您可以在 Gorm 中有效管理 JSONB 数据,而无需使用 postgres.Jsonb 类型。
以上是如何使用 Gorm 和 PostgreSQL 高效管理 JSONB 数据,尤其是字符串切片?的详细内容。更多信息请关注PHP中文网其他相关文章!