Página inicial do Docs → Iniciar e gerenciar o MongoDB → MongoDB Atlas
sqlGenerateSchema
O comando sqlGenerateSchema
gera um esquema SQL para a coleção ou visualização especificada.
Sintaxe
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: [<namespace>], sampleSize: <int>, setSchemas: true|false })
Parâmetros
Parâmetro | Tipo | Descrição | necessidade |
---|---|---|---|
sampleNamespaces | array de strings | Especifica a lista separada por vírgula de namespaces para os quais gerar esquemas. Umnamespace inclui o nome do banco de dados, um separador de ponto (.) e a coleção ou nome de visualização (ou seja, <database>.<collection>|<view> ). Para gerar esquemas para todas as coleções em um banco de dados, especifique * da coleção ou nome de visualização (ou seja, <database>.* ). Se omitido, gera esquemas para todas as coleções e visualizações no banco de dados atual. | Opcional |
sampleSize | inteiro | Especifica o número de documentos a serem usados como amostra para criar o esquema. Se omitido, o padrão é 1000 . | Opcional |
setSchemas | boleano | Especifica se deseja ou não armazenar o esquema gerado para a coleção ou visualização. O valor pode ser um dos seguintes:
Se omitido, o padrão é | Opcional |
Saída
O comando retornará o seguinte se o comando for bem-sucedido.
{ "ok" : 1, "schemas" : [ { "databaseName" : "<database-name>", "namespaces" : [ { "name" : "<collection-name>", "schema" : { "version" : NumberLong(1), "jsonSchema" : {} } } ] }, ... ] }
O objeto schemas
contém os seguintes campos.
Parâmetro | Tipo | Descrição |
---|---|---|
databaseName | string | Nome do banco de dados. |
namespaces | Array de objetos | Nome e esquema gerado de cada coleção ou visualização. |
namespaces.name | string | Nome da coleção ou visualização. |
namespaces[n].schema | documento | Esquema da coleção ou visualização. |
namespaces[n].schema.version | inteiro | Formatar versão do esquema. O valor é sempre 1. |
namespaces[n].schema.jsonSchema | documento | Esquema JSON da coleção ou visualização. O esquema JSON pode conter os seguintes campos:
Para saber mais sobre esses campos, consulte Palavras- chave do JSON schema. |
Se você define o esquema da coleção ou visualização usando a opção setSchemas
, poderá verificar se o comando foi bem-sucedido executando o comando sqlGetSchema
. O comando sqlGetSchema
metadata.description
deve conter o seguinte valor:
"set using sqlGenerateSchema with setSchemas = true"
Exemplos
Considere uma coleção denominada egData
em um banco de dados denominada sampleDB
com os seguintes documentos:
{"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}
Os exemplos abaixo usam o comando sqlGenerateSchema
para gerar um esquema para a coleção acima.
Exemplo básico
O seguinte comando gera um esquema para a coleção denominada sampleDB.egData
na configuração de armazenamento. O comando utiliza dois documentos selecionados aleatoriamente da coleção para criar o esquema, pois o sampleSize
é 2
. O comando não define o esquema para a coleção porque a opção setSchemas
não é especificada com o comando e o padrão é false
.
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], sampleSize: 2 })
O comando anterior retorna a seguinte saída. Para saber mais sobre os campos na saída, consulte Saída.
{ "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" ] } } } } } ] } ] }
Gerar e definir exemplo de esquema
O comando a seguir gera um esquema para a coleção chamada sampleDB.egData
na configuração de armazenamento. O comando utiliza até 1000 documentos na coleção para criar o esquema, pois a opção sampleSize
não é especificada com o comando e padrão para 1000
. O comando define o esquema gerado como o esquema a ser usado para a coleção porque a opção setSchemas
está definida como true
.
db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], setSchemas: true })
O comando anterior retorna a seguinte saída. Para saber mais sobre os campos na saída, consulte Saída.
{ "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" ] } } } } ] } ] }
Erros
O comando retorna o seguinte erro se o comando falhar:
"failedNamespaces": [ { "namespace" : "<db.ns>", "error" : "no documents found in sample namespace" } ]
O erro acima será retornado se os namespaces especificados não existirem na configuração de armazenamento ou estiverem vazios. Este erro também será retornado se o esquema não puder ser definido para um determinado namespace.