MariaDB JSON_CONTAINS() 函数的基础用法与实例

MariaDB JSON_CONTAINS() 函数是一个用于检查 JSON 文档中是否包含指定的值或子文档的函数。

发布于

MariaDB JSON_CONTAINS() 函数是一个用于检查 JSON 文档中是否包含指定的值或子文档的函数。它可以用于查询或过滤包含 JSON 数据的表或列。

语法

MariaDB JSON_CONTAINS() 函数的语法如下:

JSON_CONTAINS(json_doc, val[, path])

其中:

  • json_doc 是一个有效的 JSON 文档,可以是一个字面值,一个变量,或者一个列名。
  • val 是一个要检查的值或子文档,可以是一个字面值,一个变量,或者一个列名。
  • path 是一个可选的 JSON 路径表达式,用于指定要检查的位置。如果省略,则默认为根路径 ('$')。路径表达式的语法参见 JSON Path Expressions
  • 函数的返回值是一个布尔值,如果 json_doc 中包含 val,返回 1,否则返回 0

实例

检查 JSON 文档中是否包含指定的值

假设我们有一个 JSON 文档,如下所示:

{
  "name": "Alice",
  "age": 25,
  "hobbies": ["reading", "swimming", "coding"]
}

我们可以使用 MariaDB JSON_CONTAINS() 函数来检查这个 JSON 文档中是否包含某个值,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  '"Alice"'
);

输出结果为:

0

这表示 JSON 文档中不包含 "Alice" 这个值,因为它是 name 这个键的值,不是一个独立的值。如果要从中找到这个值,需要指定路径 '$.name',如下面的语句:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  '"Alice"',
  '$.name'
);

输出结果为:

1

检查 JSON 文档中是否包含指定的子文档

我们可以使用 MariaDB JSON_CONTAINS() 函数来检查 JSON 文档中是否包含指定的子文档,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  '{"city": "New York"}',
  '$.address'
);

输出结果为:

1

这表示 JSON 文档中的 $.address 路径下包含 {"city": "New York"} 这个子文档,即 address 对象的 city 属性。

如果我们检查一个不存在的子文档,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  '{"city": "London"}',
  '$.address'
);

输出结果为:

0

这表示 JSON 文档中的 $.address 路径下不包含 {"city": "London"} 这个子文档。

检查 JSON 文档中是否包含指定的数组元素

我们可以使用 MariaDB JSON_CONTAINS() 函数来检查 JSON 文档中是否包含指定的数组元素,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  '"reading"',
  '$.hobbies'
);

输出结果为:

1

这表示 JSON 文档中的 $.hobbies 路径下包含 "reading" 这个数组元素,即 hobbies 数组的第一个元素。

如果我们检查一个不存在的数组元素,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  '"dancing"',
  '$.hobbies'
);

输出结果为:

0

这表示 JSON 文档中的 $.hobbies 路径下不包含 "dancing" 这个数组元素。

检查 JSON 文档中是否包含指定的嵌套值

我们可以使用 MariaDB JSON_CONTAINS() 函数来检查 JSON 文档中是否包含指定的嵌套值,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  '"USA"',
  '$.address.country'
);

输出结果为:

1

这表示 JSON 文档中的 $.address.country 路径下包含 "USA" 这个值,即 address 对象的 country 属性的值。

如果我们检查一个不存在的嵌套值,例如:

SELECT JSON_CONTAINS(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  '"UK"',
  '$.address.country'
);

输出结果为:

0

这表示 JSON 文档中的 $.address.country 路径下不包含 "UK" 这个值。

相关函数

除了 MariaDB JSON_CONTAINS() 函数外,还有一些与 JSON 值相关的函数,如下:

  • MariaDB JSON_CONTAINS_PATH() 函数:用于检查 JSON 文档中是否存在指定路径。
  • MariaDB JSON_EXTRACT() 函数:用于从 JSON 文档中提取指定路径的值。
  • MariaDB JSON_SEARCH() 函数:用于在 JSON 文档中搜索指定的值,并返回其路径。
  • MariaDB JSON_TYPE() 函数:用于返回 JSON 文档中指定路径的值的类型

结论

MariaDB JSON_CONTAINS() 函数是一个用于检查 JSON 文档中是否包含指定的值或子文档的函数。它可以用于查询或过滤包含 JSON 数据的表或列。

在本文中,我们介绍了 MariaDB JSON_CONTAINS() 函数的语法,参数,以及一些基础的用法实例。我们学习了如何使用 MariaDB JSON_CONTAINS() 函数来检查 JSON 文档中是否包含指定的值,子文档,数组元素,通配符值,或嵌套值,以及如何根据不同的需求来指定路径表达式。我们还介绍了一些与 JSON 值相关的函数,以及它们的作用。