Partilhar via


Use comandos de extensão do MongoDB para gerenciar dados armazenados no Azure Cosmos DB para MongoDB

APLICA-SE A: MongoDB

O documento a seguir contém os comandos de ação personalizados específicos do Azure Cosmos DB para MongoDB. Esses comandos podem ser usados para criar e obter recursos de banco de dados específicos para o modelo de capacidade do Azure Cosmos DB.

Usando o Azure Cosmos DB para MongoDB, você pode aproveitar os benefícios compartilhados do Azure Cosmos DB. Esses benefícios incluem, mas não estão limitados a:

  • Distribuição global
  • Fragmentação automática
  • Elevada disponibilidade
  • Garantias de latência
  • Encriptação inativa
  • Cópias de Segurança

Você pode aproveitar esses benefícios enquanto preserva seus investimentos em seus aplicativos MongoDB existentes. Você pode se comunicar com o Azure Cosmos DB para MongoDB usando qualquer um dos drivers de cliente MongoDB de código aberto. O Azure Cosmos DB para MongoDB permite o uso de drivers de cliente existentes aderindo ao protocolo de fio MongoDB.

Suporte ao protocolo MongoDB

O Azure Cosmos DB para MongoDB é compatível com o servidor MongoDB versão 4.0, 3.6 e 3.2. Para obter mais informações, consulte Recursos e sintaxe suportados nas versões 4.0, 3.6 e 3.2.

Os seguintes comandos de extensão criam e modificam recursos específicos do Azure Cosmos DB por meio de solicitações de banco de dados:

Criar base de dados

O comando create database extension cria um novo banco de dados MongoDB. O nome do banco de dados pode ser usado a partir do contexto do banco de dados definido pelo use database comando. A tabela a seguir descreve os parâmetros dentro do comando:

Campo Tipo Description
customAction string Nome do comando personalizado. O valor deve ser CreateDatabase.
offerThroughput int Taxa de transferência provisionada definida no banco de dados. Este parâmetro é opcional.
autoScaleSettings Object Necessário para o modo de dimensionamento automático. Este objeto contém as configurações associadas ao modo de capacidade Autoscale. Você pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Solicitação para as quais a coleção pode aumentar dinamicamente.

Saída

Se o comando for bem-sucedido, ele retornará a seguinte resposta:

{ "ok" : 1 }

Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: Criar um banco de dados

Para criar um banco de dados nomeado "test" que usa todos os valores padrão, use o seguinte comando:

use test
db.runCommand({customAction: "CreateDatabase"});

Este comando cria um banco de dados sem taxa de transferência no nível de banco de dados. Essa operação significa que as coleções dentro desse banco de dados precisam especificar a quantidade de taxa de transferência que você precisa usar.

Exemplo: Criar um banco de dados com taxa de transferência

Para criar um banco de dados nomeado "test" e especificar uma taxa de transferência provisionada no nível de banco de dados de 1000 RUs, use o seguinte comando:

use test
db.runCommand({customAction: "CreateDatabase", offerThroughput: 1000 });

Este comando cria um banco de dados e define uma taxa de transferência para ele. Todas as coleções dentro desse banco de dados compartilham a taxa de transferência definida, a menos que as coleções sejam criadas com um nível de taxa de transferência específico.

Exemplo: Criar um banco de dados com taxa de transferência de dimensionamento automático

Para criar um banco de dados chamado "test" e especificar uma taxa de transferência máxima de Autoscale de 20.000 RU/s no nível do banco de dados, use o seguinte comando:

use test
db.runCommand({customAction: "CreateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Atualizar base de dados

O comando update database extension atualiza as propriedades associadas ao banco de dados especificado. A alteração do banco de dados de taxa de transferência provisionada para dimensionamento automático e vice-versa só é suportada no portal do Azure. A tabela a seguir descreve os parâmetros dentro do comando:

Campo Tipo Description
customAction string Nome do comando personalizado. O valor deve ser UpdateDatabase.
offerThroughput int Nova taxa de transferência provisionada que você deseja definir no banco de dados se o banco de dados usar taxa de transferência no nível de banco de dados
autoScaleSettings Object Necessário para o modo de dimensionamento automático. Este objeto contém as configurações associadas ao modo de capacidade Autoscale. Você pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Solicitação para as quais o banco de dados pode ser aumentado dinamicamente.

Este comando usa o banco de dados especificado no contexto da sessão. Esse banco de dados é o mesmo que você usou no use <database> comando. No momento, o nome do banco de dados não pode ser alterado usando este comando.

Saída

Se o comando for bem-sucedido, ele retornará a seguinte resposta:

{ "ok" : 1 }

Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: atualizar a taxa de transferência provisionada associada a um banco de dados

Para atualizar a taxa de transferência provisionada de um banco de dados com nome "test" para 1200 RUs, use o seguinte comando:

use test
db.runCommand({customAction: "UpdateDatabase", offerThroughput: 1200 });

Exemplo: Atualizar a taxa de transferência de dimensionamento automático associada a um banco de dados

Para atualizar a taxa de transferência provisionada de um banco de dados com nome "test" para 20.000 RUs ou transformá-la em um nível de taxa de transferência de Autoscale, use o seguinte comando:

use test
db.runCommand({customAction: "UpdateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Obter base de dados

O comando get database extension retorna o objeto de banco de dados. O nome do banco de dados é usado a partir do contexto do banco de dados no qual o comando é executado.

{
  customAction: "GetDatabase"
}

A tabela a seguir descreve os parâmetros dentro do comando:

Campo Tipo Description
customAction string Nome do comando personalizado. O valor deve ser GetDatabase.

Saída

Se o comando for bem-sucedido, a resposta conterá um documento com os seguintes campos:

Campo Tipo Description
ok int Estado da resposta. 1 == sucesso. 0 == fracasso.
database string Nome do banco de dados.
provisionedThroughput int Taxa de transferência provisionada definida no banco de dados se o banco de dados estiver usando a taxa de transferência manual no nível do banco de dados
autoScaleSettings Object Este objeto contém os parâmetros de capacidade associados ao banco de dados se estiver usando o modo Autoscale. O maxThroughput valor descreve o maior número de Unidades de Solicitação para as quais o banco de dados pode ser aumentado dinamicamente.

Se o comando falhar, uma resposta de comando personalizado padrão será retornada. Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: Obter o banco de dados

Para obter o objeto de banco de dados para um banco de dados chamado "test", use o seguinte comando:

use test
db.runCommand({customAction: "GetDatabase"});

Se o banco de dados não tiver taxa de transferência associada, a saída será:

{ "database" : "test", "ok" : 1 }

Se o banco de dados tiver uma taxa de transferência manual no nível de banco de dados associada a ele, a saída mostrará os provisionedThroughput valores:

{ "database" : "test", "provisionedThroughput" : 20000, "ok" : 1 }

Se o banco de dados tiver uma taxa de transferência de Autoscale no nível de banco de dados associada a ele, a saída mostrará o provisionedThroughput, que descreve o RU/s mínimo para o banco de dados e o autoScaleSettings objeto, incluindo o maxThroughput, que descreve o RU/s máximo para o banco de dados.

{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
                "maxThroughput" : 20000
        },
        "ok" : 1
}

Criar coleção

O comando create collection extension cria uma nova coleção MongoDB. O nome do banco de dados é usado a partir do contexto de bancos de dados definido pelo use database comando. O formato do comando CreateCollection é o seguinte:

{
  customAction: "CreateCollection",
  collection: "<Collection Name>",
  shardKey: "<Shard key path>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" to use Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

A tabela a seguir descreve os parâmetros dentro do comando:

Campo Type Obrigatório Description
customAction string Obrigatório Nome do comando personalizado. O valor deve ser CreateCollection.
collection string Necessário Nome da coleção. Não são permitidos caracteres especiais ou espaços.
offerThroughput int Opcional Taxa de transferência provisionada a ser definida no banco de dados. Se esse parâmetro não for fornecido, o padrão será de no mínimo, 400 RU/s. * Para especificar a taxa de transferência além de 10.000 RU/s, o shardKey parâmetro é necessário.
shardKey string Necessário para coleções com grande taxa de transferência O caminho para a Chave de Fragmento para a coleção fragmentada. Este parâmetro é necessário se você definir mais de 10.000 RU/s no offerThroughput. Se for especificado, todos os documentos inseridos requerem essa chave e valor.
autoScaleSettings Object Necessário para o modo de dimensionamento automático Este objeto contém as configurações associadas ao modo de capacidade Autoscale. Você pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Solicitação para as quais a coleção pode ser aumentada dinamicamente.
indexes Array Opcionalmente, configure índices. Este parâmetro é suportado apenas para contas 3.6+. Quando presente, é necessário um índice sobre _id. Cada entrada na matriz deve incluir uma chave de um ou mais campos, um nome e pode conter opções de índice. Por exemplo, para criar um índice composto exclusivo nos campos a e b usar esta entrada: {key: {a: 1, b: 1}, name:"a_1_b_1", unique: true}.

Saída

Retorna uma resposta de comando personalizado padrão. Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: Criar uma coleção com a configuração mínima

Para criar uma nova coleção com nome "testCollection" e os valores padrão, use o seguinte comando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection"});

Esta operação resulta em uma nova coleção fixa, sem fragmentos, com 400RU/s e um índice no _id campo criado automaticamente. Este tipo de configuração também se aplica ao criar novas coleções através da insert() função. Por exemplo:

use test
db.newCollection.insert({});

Exemplo: Criar uma coleção sem fragmentos

Para criar uma coleção não fragmentada com nome "testCollection" e taxa de transferência provisionada de 1000 RUs, use o seguinte comando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 1000});

Você pode criar uma coleção com até 10.000 RU/s sem offerThroughput precisar especificar uma chave de estilhaço. Para coleções com maior taxa de transferência, confira a próxima seção.

Exemplo: Criar uma coleção fragmentada

Para criar uma coleção fragmentada com nome "testCollection" e taxa de transferência provisionada de 11.000 RUs e uma shardkey propriedade "a.b", use o seguinte comando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 11000, shardKey: "a.b" });

Este comando agora requer o shardKey parâmetro, uma vez que mais de 10.000 RU/s especificados no offerThroughput.

Exemplo: Criar uma coleção de Autoscale não fragmentada

Para criar uma coleção não fragmentada nomeada 'testCollection' que usa a capacidade de taxa de transferência Autoscale definida como 4.000 RU/s, use o seguinte comando:

use test
db.runCommand({ 
    customAction: "CreateCollection", collection: "testCollection", 
    autoScaleSettings:{
      maxThroughput: 4000
    } 
});

Para o autoScaleSettings.maxThroughput valor, você pode especificar um intervalo de 4.000 RU/s a 10.000 RU/s sem uma chave de estilhaço. Para uma taxa de transferência de escala automática mais alta, você precisa especificar o shardKey parâmetro.

Exemplo: Criar uma coleção de Autoscale fragmentada

Para criar uma coleção fragmentada nomeada 'testCollection' com uma chave de estilhaço chamada 'a.b', e que usa a capacidade de taxa de transferência Autoscale definida como 20.000 RU/s, use o seguinte comando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", shardKey: "a.b", autoScaleSettings: { maxThroughput: 20000 }});

Atualizar coleção

O comando update collection extension atualiza as propriedades associadas à coleção especificada. A alteração da sua coleção de taxa de transferência provisionada para dimensionamento automático e vice-versa só é suportada no portal do Azure.

{
  customAction: "UpdateCollection",
  collection: "<Name of the collection that you want to update>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" if using Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting. Changing between Autoscale and Provisioned throughput is only supported in the Azure Portal.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

A tabela a seguir descreve os parâmetros dentro do comando:

Campo Tipo Description
customAction string Nome do comando personalizado. O valor deve ser UpdateCollection.
collection string Nome da coleção.
offerThroughput int Taxa de transferência provisionada a ser definida na coleção.
autoScaleSettings Object Necessário para o modo de dimensionamento automático. Este objeto contém as configurações associadas ao modo de capacidade Autoscale. O maxThroughput valor descreve o maior número de Unidades de Solicitação para as quais a coleção pode ser aumentada dinamicamente.
indexes Array Opcionalmente, configure índices. Este parâmetro é suportado apenas para contas 3.6+. Quando presente, o conjunto de índices especificados (incluindo índices em queda) substitui os índices existentes da coleção. É necessário um índice sobre _id. Cada entrada na matriz deve incluir uma chave de um ou mais campos, um nome e pode conter opções de índice. Por exemplo, para criar um índice composto exclusivo nos campos a e b, use esta entrada: {key: {a: 1, b: 1}, name: "a_1_b_1", unique: true}.

Saída

Retorna uma resposta de comando personalizado padrão. Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: atualizar a taxa de transferência provisionada associada a uma coleção

Para atualizar a taxa de transferência provisionada de uma coleção com nome "testCollection" para 1200 RUs, use o seguinte comando:

use test
db.runCommand({customAction: "UpdateCollection", collection: "testCollection", offerThroughput: 1200 });

Obter coleção

O comando get collection custom retorna o objeto collection.

{
  customAction: "GetCollection",
  collection: "<Name of the collection>"
}

A tabela a seguir descreve os parâmetros dentro do comando:

Campo Tipo Description
customAction string Nome do comando personalizado. O valor deve ser GetCollection.
collection string Nome da coleção.

Saída

Se o comando for bem-sucedido, a resposta conterá um documento com os seguintes campos

Campo Tipo Description
ok int Estado da resposta. 1 == sucesso. 0 == fracasso.
database string Nome do banco de dados.
collection string Nome da coleção.
shardKeyDefinition document Documento de especificação de índice usado como uma chave de estilhaço. Este campo é um parâmetro de resposta opcional.
provisionedThroughput int Taxa de transferência provisionada a ser definida na coleção. Este campo é um parâmetro de resposta opcional.
autoScaleSettings Object Este objeto contém os parâmetros de capacidade associados ao banco de dados se estiver usando o modo Autoscale. O maxThroughput valor descreve o maior número de Unidades de Solicitação para as quais a coleção pode ser aumentada dinamicamente.

Se o comando falhar, uma resposta de comando personalizado padrão será retornada. Consulte a saída padrão do comando personalizado para os parâmetros na saída.

Exemplo: Obter a coleção

Para obter o objeto de coleção para uma coleção chamada "testCollection", use o seguinte comando:

use test
db.runCommand({customAction: "GetCollection", collection: "testCollection"});

Se a coleção tiver uma capacidade de taxa de transferência associada, ela incluirá o provisionedThroughput valor e a saída será:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 400,
        "ok" : 1
}

Se a coleção tiver uma taxa de transferência Autoscale associada, ela incluirá o autoScaleSettings objeto com o maxThroughput parâmetro, que define a taxa de transferência máxima para a qual a coleção aumenta dinamicamente. Além disso, ele também inclui o provisionedThroughput valor, que define a taxa de transferência mínima que essa coleção reduz para se não houver solicitações na coleção:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 1000,
        "autoScaleSettings" : {
            "maxThroughput" : 10000
        },
        "ok" : 1
}

Se a coleção estiver compartilhando a taxa de transferência no nível do banco de dados, no modo Autoscale ou manual, a saída será:

{ "database" : "test", "collection" : "testCollection", "ok" : 1 }
{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
            "maxThroughput" : 20000
        },
        "ok" : 1
}

Paralelização de fluxos de alteração

Ao usar fluxos de alteração em escala, é melhor distribuir uniformemente a carga. O comando a seguir retorna um ou mais tokens de retomada de fluxo de alteração - cada um correspondendo a dados de um único fragmento/partição física (vários fragmentos/partições lógicas podem existir em uma partição física). Cada token de retomada faz com que watch() retorne apenas dados desse fragmento/partição física.

Use db.collection.watch() em cada token de currículo (um thread por token) para dimensionar fluxos de alteração de forma eficiente.

{
        customAction: "GetChangeStreamTokens", 
        collection: "<Name of the collection>", 
        startAtOperationTime: "<BSON Timestamp>" // Optional. Defaults to the time the command is run.
} 

Exemplo: Obter o token de fluxo

Execute o comando personalizado para obter um token de currículo para cada fragmento/partição física.

use test
db.runCommand({customAction: "GetChangeStreamTokens", collection: "<Name of the collection>"})

Execute um thread/processo watch() para cada token de currículo retornado do comando personalizado GetChangeStreamTokens. Aqui está um exemplo para um tópico.

db.test_coll.watch([{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } }, { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }], 
{fullDocument: "updateLookup", 
resumeAfter: { "_data" : BinData(0,"eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDb250aW51YXRpb24iOlt7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbndkFLbiIsInZhbHVlIjoiXCIxODQ0XCIifX1dfQ=="), "_kind" : NumberInt(1)}})

O documento (valor) no campo resumeAfter representa o token de currículo. O comando watch() retorna um curser para todos os documentos que foram inseridos, atualizados ou substituídos a partir dessa partição física desde que o comando personalizado GetChangeStreamTokens foi executado. Uma amostra dos dados retornados está incluída aqui.

{
  "_id": {
    "_data": BinData(0,
    "eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDfdsfdsfdsft7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbnVhdGlvbiIsInZhbHVlIjoiXCIxOTgwXCIifX1dfQ=="),
    "_kind": 1
  },
  "fullDocument": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc"),
    "name": John,
    "age": 6
  },
  "ns": {
    "db": "test-db",
    "coll": "test_coll"
  },
  "documentKey": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc")
  }
}

Cada documento devolvido inclui um token de currículo (são todos iguais para cada página). Esse token de retomada deve ser armazenado e reutilizado se o thread/processo morrer. Esse token de currículo pega de onde você parou e recebe dados somente dessa partição física.

Saída padrão de um comando personalizado

Se não for especificado, uma resposta personalizada contém um documento com os seguintes campos:

Campo Tipo Description
ok int Estado da resposta. 1 == sucesso. 0 == fracasso.
code int Só retornou quando o comando falhou (ou seja, ok == 0). Contém o código de erro MongoDB. Este campo é um parâmetro de resposta opcional.
errMsg string Só retornou quando o comando falhou (ou seja, ok == 0). Contém uma mensagem de erro amigável. Este campo é um parâmetro de resposta opcional.

Por exemplo:

{ "ok" : 1 }

Próximos passos

Em seguida, você pode continuar para aprender os seguintes conceitos do Azure Cosmos DB: