GORM 判断 JSON 数组是否包含某元素

2023-02-23 09:25:58 浏览数 (1)

文章目录

  • 1.问题描述
  • 2.使用 JSON_CONTAINS()
  • 3.使用 gorm.io/datatypes
  • 参考文献

1.问题描述

在 MySQL 中,并没有内置的数组数据类型。但是,MySQL 提供了一些可以实现类似数组功能的机制,如使用字符串来存储由逗号分隔的值,使用 JSON 类型来存储数组数据等。

假设您正在使用 GORM v2 和 MySQL 数据库,并且您的数据表中有一个名为 data 的 JSON 类型的列,其中存储了一个字符串数组,您想要查询该数组是否包含某个元素。

代码语言:javascript复制
import (
	"gorm.io/datatypes"
)

type MyModel struct {
    ID   uint
    Data datatypes.JSON `gorm:"column:data"`
}

2.使用 JSON_CONTAINS()

MySQL JSON_CONTAINS() 函数可以用于判断 JSON 数组中是否包含某个元素。

我们可以使用原生 SQL 作为 GORM 的内联条件来判断数组中是否包含某值。

代码语言:javascript复制
var rows []MyModel
DB.Where(fmt.Sprintf(`JSON_CONTAINS(data,'"%v"')`, YOUR_STR_VALUE)).Find(&rows)

JSON_CONTAINS 函数还可以判断 JSON 对象中某个字段的值是否为指定的值,具体用法可参见 MySQL 官网的介绍。

3.使用 gorm.io/datatypes

gorm.io/datatypes 是 GORM v2 版本中引入的一个包,提供了一些数据库特定的数据类型,例如 JSON、HSTORE、ARRAY、UUID 等。

datatypes 支持对 JSON 数组的包含查询。

代码语言:javascript复制
var rows []MyModel
DB.Where(datatypes.JSONArrayQuery("data").Contains("YOUR_STR_VALUE")).Find(&rows )

0 人点赞