对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Atlas Data Federation模式命令

在Atlas Data Federation中,您可以通过三个命令管理SQL接口使用的模式:sqlGenerateSchemasqlGetSchemasqlSetSchema。您可以从 mongosh 对联合数据库实例运行这些命令,或者在Atlas用户界面中执行等效操作。本页介绍了这些命令及其等效的用户界面界面。

Atlas Data Federation对集合中的文档进行采样以生成初始模式。有关模式管理和其他支持的部署类型的背景,请参阅模式管理。

注意

、 和sqlGenerateSchemasqlGetSchema sqlSetSchema命令及其Atlas用户界面等效命令仅应用于Atlas Data Federation部署类型。它们不适应用使用MongoDB SQL Schema Builder CLI的自管理Enterprise Advanced (EA) 部署,也不适用于针对不使用Atlas Data Federation 的标准Atlas 集群的查询。

sqlGenerateSchema 命令为指定的集合或视图生成SQL接口模式。 Atlas Data Federation对每个命名空间中的文档进行采样以得出模式。

使用 sampleNamespaces 参数时,必须对 admin数据库运行该命令。

use admin
db.runCommand({
sqlGenerateSchema: 1,
sampleNamespaces: [<namespace>],
sampleSize: <int>,
setSchemas: true|false
})
Parameter
类型
说明
必要性

sampleNamespaces

字符串数组

.指定以逗号分隔的命名空间列表,为其生成模式。命名空间包括数据库名称、点() 分隔符和集合或视图名称(即<database>.<collection>|<view> )。要为数据库中的所有集合生成模式,请指定* 而不是集合或视图名称(即<database>.* )。如果省略, Atlas Data Federation将为当前数据库中的所有集合和视图生成模式。

Optional

sampleSize

整型

指定创建模式时用作样本的文档数量。 如果省略,则默认值为 1000

Optional

setSchemas

布尔

指定是否存储集合或视图的生成模式。值可以是以下之一:

  • true 来存储模式。如果集合或视图的模式已经存在, Atlas Data Federation将覆盖现有模式。

  • false 不存储架构。

如果省略,则默认值为 false

Optional

如果成功,该命令将返回以下输出:

{
"ok" : 1,
"schemas" : [
{
"databaseName" : "<database-name>",
"namespaces" : [
{
"name" : "<collection-name>",
"schema" : {
"version" : NumberLong(1),
"jsonSchema" : { ... }
}
}
]
},
...
]
}

schemas 对象包含以下字段。

Parameter
类型
说明

databaseName

字符串

数据库名称。

namespaces

对象数组

每个集合或视图的名称和生成模式。

namespaces.name

字符串

集合或视图的名称。

namespaces[n].schema

文档

集合或视图的模式。

namespaces[n].schema.version

整型

模式的格式版本。值始终为 1。

namespaces[n].schema.jsonSchema

文档

集合或视图的JSON schema。 JSON schema可以包含以下字段:

  • bsonType

  • properties

  • items

  • additionalProperties

  • required

要了解有关这些字段的更多信息,请参阅 JSON schema 关键字

如果使用 setSchemas 选项设立集合或视图的模式,则可以通过运行sqlGetSchema 命令来验证命令是否成功。 sqlGetSchema 命令 metadata.description字段包含以下值:

"set using sqlGenerateSchema with setSchemas = true"

如果失败,该命令将返回以下错误:

"failedNamespaces": [
{
"namespace" : "<db.ns>",
"error" : "no documents found in sample namespace"
}
]

如果指定的命名空间在存储配置中不存在或为空, Atlas Data Federation将返回此错误。如果Atlas Data Federation无法为给定命名空间设立模式,它也会返回此错误。

sqlGetSchema 命令可检索为指定集合或视图存储的模式。

db.getSiblingDB("<dbName>").runCommand({
sqlGetSchema: "<collection-name>|<view-name>"
})
Parameter
类型
说明
必要性

<collection-name>

字符串

要检索其模式的集合的名称。提供集合名称或视图名称。

可选的

<view-name>

字符串

要检索其模式的视图的名称。提供视图名称或集合名称。

可选的

如果集合或视图没有模式,该命令将返回以下输出:

{ "ok" : 1, "metadata" : { }, "schema" : { } }

如果集合或视图具有模式,该命令将返回类似于以下的输出:

{
"ok": 1,
"metadata": {
"description": "<description>"
},
"schema": {
"version": NumberLong(1),
"jsonSchema": { ... }
}
}

metadata.description 字段描述了如何为集合设置模式。值可以是以下任意选项:

generated automatically by Atlas Data Federation

表示模式是由 Atlas Data Federation 自动生成的。

set using sqlGenerateSchema with setSchemas = true

表示该模式由 sqlGenerateSchema 命令设立,因为setSchema 选项设立为true

set using sqlSetSchema

表示模式是使用 sqlSetSchema 命令设立的。

schema 文档包含以下字段:

Parameter
类型
说明

schema.version

整型

模式的格式版本。值始终为 1。

schema.jsonSchema

文档

集合或视图的JSON schema。 JSON schema可以包含以下字段:

  • bsonType

  • properties

  • items

要了解有关这些字段的更多信息,请参阅 JSON schema 关键字

sqlSetSchema 命令设置或删除集合或视图的模式。该命令会直接应用您提供的模式。该命令不会根据集合中的数据验证所提供的模式。

db.getSiblingDB("<dbName>").runCommand({
sqlSetSchema: "<collection-name>|<view-name>",
schema: {
"version": 1,
"jsonSchema": <jsonSchema>
}
})
db.getSiblingDB("<dbName>").runCommand({
sqlSetSchema: "<collection-name>|<view-name>",
schema: {}
})
Parameter
类型
说明
必要性

<collection-name>

字符串

要为其设立模式的集合的名称。提供集合名称或视图名称。

可选的

<view-name>

字符串

要设立模式的视图的名称。提供视图名称或集合名称。

可选的

schema

文档

模式的格式版本以及以下任一项:

  • 集合或视图的JSON schema

  • 空文档,用于删除集合或视图的模式

您可以在items字段中提供单个文档或文档数组。 检索模式时, items会显示您用于设置模式的表单。

必需

如果成功,该命令将返回以下输出:

{ "ok" : 1 }

您可以通过运行sqlGetSchema命令来验证该命令是否成功。 响应中的metadata.description字段包含以下值:

"set using sqlSetSchema"

考虑名为 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}

以下示例使用Atlas Data Federation模式命令来生成、检索、设立和删除上述集合的模式。

以下命令为存储配置中名为 sampleDB.egData 的集合生成模式。该命令使用从集合中随机选择的两个文档来创建模式,因为 sampleSize2。该命令不会为集合设立模式,因为未指定 setSchemas 选项且默认为 false

use admin
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。该命令将生成的模式设置为用于集合的模式,因为 setSchemastrue

use admin
db.runCommand({
sqlGenerateSchema: 1,
sampleNamespaces: ["sampleDB.egData"],
setSchemas: true
})

以下命令可检索为 egData 集合存储的模式:

db.getSiblingDB("sampleDB").runCommand({
sqlGetSchema: "egData"
})

上一个命令会返回以下输出。 要了解有关输出中字段的更多信息,请参阅输出。

{
"ok" : 1,
"metadata" : {
"description" : "set using sqlGenerateSchema with setSchemas = true"
},
"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" ]
}
}
}
}
}

以下 sqlSetSchema 命令为 egData集合设置模式:

db.getSiblingDB("sampleDB").runCommand({
sqlSetSchema : "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" ]
}
}
}
}
})

上一命令会返回以下输出:

{ "ok" : 1 }

以下 sqlSetSchema 命令通过传递空的 schema文档来删除 egData集合的模式:

db.getSiblingDB("sampleDB").runCommand({
sqlSetSchema: "egData",
schema: {}
})

上一命令会返回以下输出:

{ "ok" : 1 }

您可以在Atlas用户界面的 Manage SQL Schemas 页面执行相同的模式操作。用户界面界面对文档进行采样以生成模式,与 sqlGenerateSchema 命令相同。

创建快速启动连接时, Atlas Data Federation会自动生成模式。要手动创建模式,请使用以下过程。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

3

在具有空模式的集合上:

  1. 单击

  2. 单击Generate new schema from sample ,或提供您自己的JSON。

  3. 单击 Save(连接)。

每当根本的数据的形状发生变化时(例如当您添加字段或更改字段类型时),请重新生成模式,以便您的SQL查询反映当前数据。要自动使模式保持最新状态,请参阅计划模式更新。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

3

在已经具有模式的集合上:

  1. 单击

  2. 单击 Generate new schema from sample(连接)。

  3. 单击 Save(连接)。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

在此页面上,您可以查看所有现有模式。要查看JSON格式的特定模式,请单击。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

3
  1. 在模式旁边,单击

  2. 编辑JSON。

  3. 单击 Save(连接)。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

在此页面上,您可以查看所有现有模式。

3
  1. 对于要删除的模式,请单击

  2. 单击 Clear...(连接)。

  3. 单击 Clear schema 进行确认。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

在此页面上,您可以查看所有现有模式。

3
  1. 单击右上角的图标。

  2. 单击 Clear all schemas(连接)。

  3. 再次单击 Clear all schemas 进行确认。

计划的模式更新可帮助您长期保持模式的准确性。计划的模式更新对每个命名空间示例,并将新模式与现有模式合并。示例,计划的模式更新允许Atlas Data Federation自动选取添加到集合中的新字段。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Services 标题下的 Data Federation

显示Data Federation 页面。

2

Federated Database Instances部分中,单击模式,然后从下拉列表中选择Manage SQL Schemas

3
  1. 单击 Configure schema update schedule(连接)。

  2. 选择频率。

  3. 单击 Save(连接)。