MySQL Shell 8.4  /  ...  /  使用 --import 命令导入 JSON 文档

11.2.3 使用 --import 命令导入 JSON 文档

注意

--import 命令已弃用,将在未来版本中移除。

--import 命令可作为 mysqlsh 命令界面在命令行中调用 JSON 导入实用程序的替代方法。此命令提供简短的语法,无需使用选项名称,并且接受来自标准输入的 JSON 文档。语法如下

mysqlsh user@host:port/mydb --import <path> [target] [tableColumn] [options]

mysqlsh 命令界面一样,您必须在 URI 类型的连接字符串中或使用额外的 --schema 命令行选项指定目标数据库。 --import 命令的第一个参数是包含要导入的 JSON 文档的文件的路径。要从标准输入读取 JSON 文档,请指定一个连字符 (-) 而不是文件路径。输入流的结尾是文件结束指示符,在 Unix 系统上为 Ctrl+D,在 Windows 系统上为 Ctrl+Z

在指定路径(或对于标准输入为 -)之后,下一个参数是目标集合或表的名称。如果使用标准输入,则必须指定目标。

  • 如果使用标准输入并且指定的目标是指定模式中存在的关联表,则文档将导入到该表中。您可以指定一个额外的参数来提供列名,在这种情况下,指定列将用作导入目标。否则,将使用默认列名 doc,该列必须存在于现有表中。如果目标不是现有表,则实用程序将搜索具有指定目标名称的任何集合,并将文档导入到该集合中。如果找不到这样的集合,则实用程序将创建具有指定目标名称的集合并将文档导入到该集合中。要创建并导入到表中,您还必须指定列名作为额外的参数,在这种情况下,实用程序将创建具有指定表名的关联表并将数据导入到指定的列中。

  • 如果指定了文件路径和目标,则实用程序将搜索具有指定目标名称的任何集合。如果找不到,则实用程序默认会创建具有该名称的集合并将文档导入到该集合中。要将文件导入到表中,您还必须指定列名作为额外的参数,在这种情况下,实用程序将搜索现有的关联表并将数据导入到该表中,或者创建具有指定表名的关联表并将数据导入到指定的列中。

  • 如果指定了文件路径但未指定目标,则实用程序将在指定的模式中搜索任何现有的集合,该集合具有提供的导入文件名称(不含文件扩展名)。如果找到,则文档将导入到该集合中。如果在指定的模式中找不到具有提供的导入文件名名称的集合,则实用程序将创建具有该名称的集合并将文档导入到该集合中。

如果您要导入包含 BSON(二进制 JSON)数据类型表示的文档,您还可以指定选项 --convertBsonOid--extractOidTime=field_name--convertBsonTypes 以及 第 11.2.4 节,“BSON 数据类型表示的转换” 中列出的控制选项。

以下示例从标准输入读取 JSON 文档并将它们导入到 mydb 数据库中名为 territories 的目标中。如果找不到名为 territories 的集合或表,则实用程序将创建一个名为 territories 的集合并将文档导入到该集合中。如果您想创建并将文档导入到名为 territories 的关联表中,则必须指定列名作为额外的参数。

mysqlsh user@localhost/mydb --import - territories

以下带有文件路径和目标的示例将文件 /europe/regions.json 中的 JSON 文档导入到 mydb 数据库中名为 regions 的关联表中的 jsondata 列中。模式名称使用 --schema 命令行选项指定,而不是在 URI 类型的连接字符串中指定

mysqlsh user@localhost:33062 --import /europe/regions.json regions jsondata --schema=mydb

以下带有文件路径但未指定目标的示例将导入文件 /europe/regions.json 中的 JSON 文档。如果在指定的 mydb 数据库中找不到名为 regions(提供的导入文件名称,不含扩展名)的集合或表,则实用程序将创建一个名为 regions 的集合并将文档导入到该集合中。如果已存在名为 regions 的集合,则实用程序将文档导入到该集合中。

mysqlsh user@localhost/mydb --import /europe/regions.json

MySQL Shell 返回一条消息,确认导入的参数,例如,从文件 "/europe/regions.json" 导入到位于 127.0.0.1:33062 的 MySQL 服务器上的表 `mydb`.`regions` 中

导入完成后,或者如果导入因用户使用 Ctrl+C 或错误而中途停止,则会向用户返回一条消息,显示已成功导入的 JSON 文档数量以及任何适用的错误消息。如果导入成功完成,则进程返回零;如果发生错误,则返回非零退出代码。