在 MySQL 中,表可以包含传统的关系数据、JSON 值或两者兼有。您可以通过将文档存储在具有原生 JSON 数据类型的列中,将传统数据与 JSON 文档结合使用。In MySQL, a table may contain traditional relational data, JSON
values, or both. You can combine traditional data with JSON
documents by storing the documents in columns having a native
JSON data type.
本节中的示例使用 world_x 架构中的 city 表。Examples in this section use the city table in the
world_x schema.
city 表有五列(或字段)。The city table has five columns (or fields).
+---------------+------------+-------+-------+---------+------------------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------+-------+-------+---------+------------------+ | ID | int(11) | NO | PRI | null | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | | | | | District | char(20) | NO | | | | | Info | json | YES | | null | | +---------------+------------+-------+-------+---------+------------------+
要将文档插入表的列中,将一个格式良好、顺序正确的 JSON 文档传递给 values() 方法。在以下示例中,将一个文档作为最终值传递以插入 Info 列。To insert a document into the column of a table, pass to the
values() method a well-formed JSON document
in the correct order. In the following example, a document is
passed as the final value to be inserted into the Info column.
mysql-js> db.city.insert().values(
None, "San Francisco", "USA", "California", '{"Population":830000}')
您可以使用搜索条件发出查询,该条件在表达式中评估文档的值。You can issue a query with a search condition that evaluates document values in the expression.
mysql-js> db.city.select(["ID", "Name", "CountryCode", "District", "Info"]).where(
"CountryCode = :country and Info->'$.Population' > 1000000").bind(
'country', 'USA')
+------+----------------+-------------+----------------+-----------------------------+
| ID | Name | CountryCode | District | Info |
+------+----------------+-------------+----------------+-----------------------------+
| 3793 | New York | USA | New York | {"Population": 8008278} |
| 3794 | Los Angeles | USA | California | {"Population": 3694820} |
| 3795 | Chicago | USA | Illinois | {"Population": 2896016} |
| 3796 | Houston | USA | Texas | {"Population": 1953631} |
| 3797 | Philadelphia | USA | Pennsylvania | {"Population": 1517550} |
| 3798 | Phoenix | USA | Arizona | {"Population": 1321045} |
| 3799 | San Diego | USA | California | {"Population": 1223400} |
| 3800 | Dallas | USA | Texas | {"Population": 1188580} |
| 3801 | San Antonio | USA | Texas | {"Population": 1144646} |
+------+----------------+-------------+----------------+-----------------------------+
9 rows in set (0.01 sec)
参见 处理关系表和文档 获取更多信息。See Working with Relational Tables and Documents for more information.
参见 第 13.5 节,“JSON 数据类型” 以获取数据类型的详细描述。See Section 13.5, “The JSON Data Type” for a detailed description of the data type.