JSON 导入实用程序需要与服务器的现有 X 协议连接。该实用程序无法通过经典的 MySQL 协议连接进行操作。
在 MySQL Shell API 中,JSON 导入实用程序是 util
全局对象的函数,具有以下签名
importJSON (path, options)
path
是一个字符串,指定包含要导入的 JSON 文档的文件的路径。这可以是写入磁盘的文件,也可以是 FIFO 特殊文件(命名管道)。
options
是一个导入选项字典,如果为空,可以省略。以下选项可用于指定 JSON 文档的导入位置和方式
-
schema: "
db_name
" 目标数据库的名称。如果省略此选项,MySQL Shell 尝试识别并使用当前会话中使用的模式名称,如 URI 样式连接字符串、
\use
命令或 MySQL Shell 选项中所指定。如果未指定模式名称且无法从会话中识别,则返回错误。-
collection: "
collection_name
" 目标集合的名称。这是指定表和列的替代方法。如果集合不存在,该实用程序会创建它。如果您没有指定
collection
、table
或tableColumn
选项,该实用程序将默认使用或创建名为提供的导入文件(不含文件扩展名)的目标集合。-
table: "
table_name
" 目标表的名称。这是指定集合的替代方法。如果表不存在,该实用程序会创建它。
-
tableColumn: "
column_name
" 目标表中导入 JSON 文档的列的名称。如果表已存在,则指定列必须存在于表中。如果您指定了
table
选项但省略了tableColumn
选项,则使用默认列名doc
。如果您指定了tableColumn
选项但省略了table
选项,则使用提供的导入文件(不含文件扩展名)的名称作为表名。-
convertBsonTypes: true
识别并转换使用 JSON 格式扩展表示的 BSON 数据类型。此选项的默认值为
false
。当您指定convertBsonTypes: true
时,每个表示的 BSON 类型都将转换为相同的或兼容的 MySQL 表示,并使用该表示导入数据值。其他选项可用于控制特定 BSON 数据类型的映射和转换;有关这些控制选项的列表和默认类型转换,请参见第 11.2.4 节,“BSON 数据类型表示的转换”。您还必须将convertBsonOid
选项设置为true
,这是在您指定convertBsonTypes: true
时该选项的默认设置。如果您导入包含 BSON 类型 JSON 扩展的文档,但未使用convertBsonTypes: true
,则文档将以与输入文件中表示的相同方式导入,作为嵌入的 JSON 文档。-
convertBsonOid: true
识别并转换 MongoDB 对象 ID,这是用于文档的
_id
值的 12 字节 BSON 类型,在 MongoDB 扩展 JSON 严格模式中表示。此选项的默认值为convertBsonTypes
选项的值,因此,如果该选项设置为true
,MongoDB 对象 ID 会自动转换为。从 MongoDB 导入数据时,如果您不转换 BSON 类型,则convertBsonOid
必须始终设置为true
,因为 MySQL 服务器要求将_id
值转换为varbinary(32)
类型。-
extractOidTime: "
field_name
" 识别并提取包含在文档的
_id
字段中的 MongoDB 对象 ID 中的日期时间值,并将其放置在导入数据的单独字段中。extractOidTime
为包含日期时间戳的文档中的字段命名。日期时间戳是对象 ID 的前 4 个字节,保持不变。必须将convertBsonOid: true
设置为使用此选项,这是convertBsonTypes
设置为 true 时的默认值。
以下示例,第一个在 MySQL Shell 的 JavaScript 模式中,第二个在 MySQL Shell 的 Python 模式中,将文件 /tmp/products.json
中的 JSON 文档导入到 mydb
数据库中的 products
集合中
mysql-js> util.importJson("/tmp/products.json", {schema: "mydb", collection: "products"})
mysql-py> util.import_json("/tmp/products.json", {"schema": "mydb", "collection": "products"})
以下 MySQL Shell 的 JavaScript 模式中的示例没有指定选项,因此省略了字典。mydb
是 MySQL Shell 会话的活动模式。因此,该实用程序将文件 /tmp/stores.json
中的 JSON 文档导入到 mydb
数据库中名为 stores
的集合中
mysql-js> \use mydb
mysql-js> util.importJson("/tmp/stores.json")
以下 MySQL Shell 的 JavaScript 模式中的示例将文件 /europe/regions.json
中的 JSON 文档导入到 mydb
数据库中名为 regions
的关系表中的 jsondata
列中。文档中使用 JSON 扩展表示的 BSON 数据类型将转换为 MySQL 表示
mysql-js> util.importJson("/europe/regions.json", {schema: "mydb", table: "regions", tableColumn: "jsondata", convertBsonTypes: true});
以下 MySQL Shell 的 JavaScript 模式中的示例执行相同的导入,但不会将 BSON 数据类型的 JSON 表示转换为 MySQL 表示。但是,文档中的 MongoDB 对象 ID 将按 MySQL 的要求进行转换,并且还会提取其日期时间戳
mysql-js> util.importJson("/europe/regions.json", {schema: "mydb", table: "regions", tableColumn: "jsondata", convertBsonOid: true, extractOidTime: "idTime"});
当导入完成时,或者如果用户使用 Ctrl+C 或由于错误而中途停止导入时,会向用户返回一条消息,显示成功导入的 JSON 文档数量以及任何适用的错误消息。该函数本身返回 void,或者在发生错误时返回异常。
也可以从命令行调用 JSON 导入实用程序。命令行调用可以使用两种不同的格式。您可以使用 mysqlsh 命令接口,该接口仅接受来自文件(或 FIFO 特殊文件)的输入,或者使用 --import
命令,该命令接受来自标准输入或文件的输入。有关说明,请参见第 11.2.2 节,“使用 Mysqlsh 命令接口导入 JSON 文档” 或 第 11.2.3 节,“使用 --import
命令导入 JSON 文档”。