创建模式
在此页面上
使用 Atlas 用户界面创建模式
创建 Atlas SQL 快速启动连接时,会自动生成模式。
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请选择包含您的项目的组织导航栏中的 Organizations菜单。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示 Data Federation页面。
创建模式使用 mongosh
sqlGenerateSchema
命令为指定的集合或视图生成 Atlas SQL 模式。
语法
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: [<namespace>], sampleSize: <int>, setSchemas: true|false })
参数
Parameter | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串数组 | 指定以逗号分隔的命名空间列表,为其生成模式。 命名空间包括数据库名称、点 (.) 分隔符以及集合或视图名称(即 | Optional |
| 整型 | 指定创建模式时用作样本的文档数量。 如果省略,则默认值为 | Optional |
| 布尔 | 指定是否存储为集合或视图生成的模式。值可以是以下值之一:
如果省略,则默认值为 | Optional |
输出
如果命令成功,则返回以下内容。
{ "ok" : 1, "schemas" : [ { "databaseName" : "<database-name>", "namespaces" : [ { "name" : "<collection-name>", "schema" : { "version" : NumberLong(1), "jsonSchema" : {} } } ] }, ... ] }
schemas
对象包含以下字段。
Parameter | 类型 | 说明 |
---|---|---|
| 字符串 | 数据库名称。 |
| 对象数组 | 每个集合或视图的名称和生成模式。 |
| 字符串 | 集合或视图的名称。 |
| 文档 | 集合或视图的模式。 |
| 整型 | 模式的格式版本。值始终为 1。 |
| 文档 | 集合或视图的JSON schema。 JSON schema可以包含以下字段:
要了解有关这些字段的更多信息,请参阅 JSON schema 关键字。 |
如果使用 setSchemas
选项来为集合或视图设置模式,则可以通过运行 sqlGetSchema
命令来验证命令是否成功。sqlGetSchema
命令 metadata.description
应包含以下值:
"set using sqlGenerateSchema with setSchemas = true"
示例
考虑名为 sampleDB
的数据库中名为 egData
的集合,其中包含以下文档:
{"a": {"b": {"c": [1, 2, 3]}}, "s": 1} {"a": {"b": {"c": [4, 5, 6]}}, "s": 2} {"a": {"b": [7, 8, 9]}, "s": 3} {"a": {"b": {"c": []}}, "s": 4} {"a": {"b": {"c": "hello"}}, "s": 5} {"a": {"b": {"c": {"d": 1}}}, "s": 6} {"a": {"b": {"c": null}}} {"s": 7}
以下示例使用 sqlGenerateSchema
命令为上述集合生成模式。
基本示例
以下命令可为存储配置中名为 sampleDB.egData
的集合生成模式。该命令使用从集合中随机选择的两个文档来创建模式,因为sampleSize
为 2
。该命令不会为集合设置模式,因为没有为该命令指定 setSchemas
选项且默认值为 false
。
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], sampleSize: 2 })
上一个命令会返回以下输出。 要了解有关输出中字段的更多信息,请参阅输出。
{ "ok" : 1, "schemas" : [ { "databaseName" : "sampleDB", "namespaces" : [ { "name" : "egData", "schema" : { "version" : NumberLong(1), "jsonSchema" : { "bsonType" : [ "object" ], "properties" : { "a" : { "bsonType" : [ "object" ], "properties" : { "b" : { "bsonType" : [ "object" ], "properties" : { "c" : { "bsonType" : [ "array" ], "items" : { "bsonType" : [ "int" ] } } } } } }, "s" : { "bsonType" : [ "int" ] } } } } } ] } ] }
生成和设置模式示例
以下命令可为存储配置中名为 sampleDB.egData
的集合生成模式。该命令可使用集合中最多 1000 个文档来创建模式,原因是没有为命令指定 sampleSize
选项而其默认值为 1000
。该命令会将生成的模式设置为用于集合的模式,原因是 setSchemas
选项设置为 true
。
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], setSchemas: true })
上一个命令会返回以下输出。 要了解有关输出中字段的更多信息,请参阅输出。
{ "ok" : 1, "schemas" : [ { "databaseName" : "sampleDB", "namespaces" : [ { "name" : "egData", "schema" : { "version" : NumberLong(1), "jsonSchema" : { "bsonType" : [ "object" ], "properties" : { "a" : { "bsonType" : [ "object" ], "properties" : { "b" : { "bsonType" : [ "object", "array" ], "properties" : { "c" : { "bsonType" : [ "array", "string", "object", "null" ], "properties" : { "d" : { "bsonType" : [ "int" ] } }, "items" : { "bsonType" : [ "int" ] } } }, "items" : { "bsonType" : [ "int" ] } } } }, "s" : { "bsonType" : [ "int", "object" ] } } } } ] } ] }
Errors
如果该命令失败,该命令将返回以下错误:
"failedNamespaces": [ { "namespace" : "<db.ns>", "error" : "no documents found in sample namespace" } ]
如果指定的命名空间在存储配置中不存在或者为空,则会返回上述错误。如果无法为给定的命名空间设置模式,也会返回此错误。