Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

创建模式

在此页面上

  • 使用 Atlas 用户界面创建模式
  • 在 Atlas 中,转到项目的联合数据库实例。
  • 导航到“管理 SQL 模式”页面。
  • 创建模式。
  • 创建模式使用 mongosh
  • 语法
  • 参数
  • 输出
  • 示例
  • 基本示例
  • 生成和设置模式示例
  • Errors

创建 Atlas 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 ,或提供您自己的JSON。

  3. 单击 Save(连接)。

sqlGenerateSchema命令为指定的集合或视图生成 Atlas SQL 模式。

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

sampleNamespaces

字符串数组

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

Optional

sampleSize

整型

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

Optional

setSchemas

布尔

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

  • true 来存储模式。如果该集合或视图的模式已存在,则覆盖现有模式。

  • 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"

考虑名为 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 的集合生成模式。该命令使用从集合中随机选择的两个文档来创建模式,因为sampleSize2。该命令不会为集合设置模式,因为没有为该命令指定 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"
]
}
}
}
}
]
}
]
}

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

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

如果指定的命名空间在存储配置中不存在或者为空,则会返回上述错误。如果无法为给定的命名空间设置模式,也会返回此错误。

后退

管理模式