

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# O que é Amazon DocumentDB (compativel com MongoDB)
<a name="what-is"></a>

O Amazon DocumentDB (compatível com MongoDB) é um serviço de banco de dados rápido, confiável e totalmente gerenciado. O Amazon DocumentDB facilita a configuração, a operação e o dimensionamento de bancos de dados compatíveis com o MongoDB na nuvem. Com o Amazon DocumentDB, você pode executar o mesmo código de aplicação e usar os mesmos drivers e ferramentas que você usa com o MongoDB.

Antes de usar o Amazon DocumentDB, é necessário revisar os conceitos e recursos descritos em [Como funciona](how-it-works.md). Depois disso, conclua as etapas em [Guia de conceitos básicos](get-started-guide.md).

**Topics**
+ [Visão geral do](#overview)
+ [Clusters](#what-is-db-clusters)
+ [Instâncias](#what-is-db-instances)
+ [Regiões e AZs](#what-is-regions-and-azs)
+ [Preços](#docdb-pricing)
+ [Monitoramento](#what-is-monitoring)
+ [Interfaces](#what-is-interfaces)
+ [Próximas etapas](#what-is-next)
+ [Como funciona](how-it-works.md)
+ [O que é um banco de dados de documentos?](what-is-document-db.md)

## Visão geral do Amazon DocumentDB
<a name="overview"></a>

A seguir estão alguns recursos gerais do Amazon DocumentDB:
+ O Amazon DocumentDB oferece suporte a dois tipos de clusters: clusters baseados em instâncias e clusters elásticos. Os clusters elásticos suportam cargas de trabalho com milhões de reads/writes por segundo e petabytes de capacidade de armazenamento. Para obter mais informações sobre clusters elásticos, consulte [Usando clusters elásticos do Amazon DocumentDB](docdb-using-elastic-clusters.md). O conteúdo abaixo se refere aos clusters baseados em instâncias do Amazon DocumentDB.
+ O Amazon DocumentDB aumenta automaticamente o tamanho do volume de armazenamento à medida que as necessidades de armazenamento do seu banco de dados aumentam. Seu volume de armazenamento aumenta em incrementos de 10 GB, até um máximo de 128 TiB. Você não precisa provisionar nenhum armazenamento em excesso para o seu cluster para lidar com o crescimento futuro.
+ Com o Amazon DocumentDB, você pode aumentar o throughput de leitura para dar suporte a solicitações de aplicações de alto volume criando até 15 instâncias de réplica. As réplicas do Amazon DocumentDB compartilham o mesmo armazenamento subjacente, reduzindo os custos e evitando a necessidade de realizar gravações nos nós da réplica. Esse recurso libera mais capacidade de processamento para atender às solicitações de leitura e reduz a defasagem das réplicas, muitas vezes para menos de 10 milissegundos. É possível adicionar réplicas em minutos, independentemente do tamanho do volume de armazenamento. O Amazon DocumentDB também fornece um endpoint de leitura, para que a aplicação possa se conectar sem precisar rastrear réplicas à medida que elas são adicionadas e removidas.
+ O Amazon DocumentDB permite aumentar ou diminuir a escala dos recursos de computação e memória para cada uma das suas instâncias. As operações de escalabilidade de computação geralmente são concluídas em poucos minutos.
+ O Amazon DocumentDB é executado na Amazon Virtual Private Cloud (Amazon VPC), para que você possa isolar seu banco de dados em sua própria rede virtual. Você também pode definir configurações de firewall para controlar o acesso de rede ao cluster.
+ O Amazon DocumentDB monitora continuamente a integridade do seu cluster. Em caso de falha na instância, o Amazon DocumentDB reinicia automaticamente a instância e os processos associados. O Amazon DocumentDB não exige uma repetição de recuperação de falhas dos redo logs do banco de dados, o que reduz consideravelmente os tempos de reinicialização. O Amazon DocumentDB também isola o cache do banco de dados do processo do banco de dados, permitindo que o cache sobreviva à reinicialização da instância.
+ Em caso de falha na instância, o Amazon DocumentDB automatiza o failover para uma das até 15 réplicas do Amazon DocumentDB que você cria em outras zonas de disponibilidade. Se nenhuma réplica tiver sido provisionada e ocorrer uma falha, o Amazon DocumentDB tentará criar uma nova instância do Amazon DocumentDB automaticamente.
+ O recurso de backup no Amazon DocumentDB permite a point-in-time recuperação do seu cluster. Esse atributo permite que você restaure seu cluster para qualquer segundo dos últimos cinco minutos do período de retenção. É possível configurar o período de retenção de backup automático para até 35 dias. Os backups automatizados são armazenados no Amazon Simple Storage Service (Amazon S3), que foi projetado para oferecer durabilidade de 99,999999999%. Os backups do Amazon DocumentDB são automáticos, incrementais e contínuos, e não têm impacto no desempenho do seu cluster.
+ Com o Amazon DocumentDB, você pode criptografar seus bancos de dados usando chaves que você cria e controla por meio AWS Key Management Service de ().AWS KMS Em um cluster de banco de dados executado com a criptografia do Amazon DocumentDB, os dados armazenados em repouso no armazenamento subjacente são criptografados. Os backups automatizados, snapshots e réplicas no mesmo cluster também são criptografados.
+ O Amazon DocumentDB é autorizado pelo Programa Federal de Gerenciamento de Riscos e Autorizações (Federal Risk and Authorization Management Program, ou FedRAMP). Ele tem autorização FedRAMP High AWS GovCloud para regiões (EUA) e autorização FedRAMP Moderate para regiões dos EUA. AWS East/West Para obter detalhes sobre os esforços de conformidade AWS e os esforços de conformidade, consulte [AWS Serviços no escopo por programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/FedRAMP/).

Se você é iniciante em AWS serviços, use os seguintes recursos para saber mais:
+ AWS oferece serviços para computação, bancos de dados, armazenamento, análise e outras funcionalidades. Para uma visão geral de todos os AWS serviços, consulte [Computação em nuvem com a Amazon Web Services](https://aws.amazon.com/what-is-aws/).
+ AWS fornece vários serviços de banco de dados. Para obter orientação sobre qual serviço é melhor para seu ambiente, consulte [Bancos de dados na AWS](https://aws.amazon.com/products/databases/).

## Clusters
<a name="what-is-db-clusters"></a>

Um *cluster* consiste em 0 a 16 instâncias e em um volume de armazenamento de cluster que gerencia os dados para essas instâncias. Todas as gravações são feitas por meio da instância principal. Todas as instâncias (principais e de réplicas) são compatíveis com leituras. Os dados do cluster são armazenados no volume do cluster com cópias em três zonas de disponibilidade diferentes.

![\[Cluster do Amazon DocumentDB contendo a instância primária na zona de disponibilidade 1, gravando no volume de cluster para réplicas nas zonas 2 e 3.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/how-it-works-01c.png)


Os clusters baseados em instâncias do Amazon DocumentDB 5.0 oferecem suporte a duas configurações de armazenamento para um cluster de banco de dados: Amazon DocumentDB Padrão e Amazon DocumentDB Otimizado para E/S. Para obter mais informações, consulte [Configurações de armazenamento de cluster do Amazon DocumentDB](db-cluster-storage-configs.md).

## Instâncias
<a name="what-is-db-instances"></a>

Uma instância do Amazon DocumentDB é um ambiente de banco de dados na nuvem. Uma instância pode conter vários bancos de dados criados pelo usuário. Você pode criar e modificar uma instância usando o Console de gerenciamento da AWS ou AWS CLI o.

A capacidade de computação e a memória de uma instância são determinadas de acordo com sua *classe de instância*. É possível selecionar a instância que melhor atenda às suas necessidades. Se suas necessidades mudarem com o tempo, será possível escolher uma classe de instância diferente. Para conhecer as especificações de classes de instância, consulte [Especificações de classe de instância](db-instance-classes.md#db-instance-class-specs).

As instâncias do Amazon DocumentDB são executadas somente no ambiente Amazon VPC. A Amazon VPC oferece controle sobre seu ambiente de rede virtual: você pode escolher seu próprio intervalo de endereços IP, criar sub-redes e configurar listas de roteamento e controle de acesso (). ACLs

Antes de criar instâncias do Amazon DocumentDB, é necessário criar um cluster para conter as instâncias.

Nem todas as classes de instância têm suporte em todas as regiões. A tabela a seguir mostra quais classes de instância são compatíveis em cada região.

**nota**  
Para obter uma lista completa de tipos de instância com suporte no Amazon DocumentDB em cada classe de instância, consulte [Especificações de classe de instância](db-instance-classes.md#db-instance-class-specs).


**Classes de instância compatíveis por região**  

|  | Classes de instância | Região | R8G | R6GD | R6G | R5 | R4 | T4G | T3 | Sem servidor | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Leste dos EUA (Ohio) | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | 
| Leste dos EUA (Norte da Virgínia) | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | 
| Oeste dos EUA (Oregon) | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | 
| África (Cidade do Cabo) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| América do Sul (São Paulo) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Hong Kong) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Hyderabad) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Malásia) |  |  | Compatível |  |  | Compatível | Compatível |  | 
| Ásia-Pacífico (Mumbai) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Osaka) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível |  | 
| Ásia-Pacífico (Seul) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Sydney) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Jacarta) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível |  | 
| Ásia-Pacífico (Melbourne) |  |  | Compatível | Compatível |  | Compatível | Compatível |  | 
| Ásia-Pacífico (Singapura) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Ásia-Pacífico (Tailândia) |  |  | Compatível |  |  | Compatível | Compatível |  | 
| Ásia-Pacífico (Tóquio) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Canadá (Central) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Frankfurt) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Zurique) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível |  | 
| Europa (Irlanda) | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | Compatível | 
| Europa (Londres) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Milão) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Paris) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Espanha) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Europa (Estocolmo) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível |  | 
| México (Centro) |  |  | Compatível |  |  | Compatível | Compatível |  | 
| Oriente Médio (Emirados Árabes Unidos) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| China (Pequim) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| China (Ningxia) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| Israel (Tel Aviv) |  |  | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| AWS GovCloud (Oeste dos EUA) | Compatível | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 
| AWS GovCloud (Leste dos EUA) |  | Compatível | Compatível | Compatível |  | Compatível | Compatível | Compatível | 

## Regiões e zonas de disponibilidade
<a name="what-is-regions-and-azs"></a>

Regiões e zonas de disponibilidade definem os locais físicos do seu cluster e instâncias.

### Regiões
<a name="what-is-regions"></a>

AWS Os recursos de computação em nuvem estão alojados em instalações de data center altamente disponíveis em diferentes áreas do mundo (por exemplo, América do Norte, Europa ou Ásia). Cada localização de data center é chamada de uma *região*.

Cada AWS região foi projetada para ser completamente isolada das outras AWS regiões. Dentro de cada região, há várias zonas de disponibilidade. Ao iniciar seus nós em diferentes zonas de disponibilidade, você é capaz de alcançar o máximo possível de tolerância a falhas. O diagrama a seguir mostra uma visão geral de como AWS as regiões e as zonas de disponibilidade funcionam.

![\[Visualização de alto nível das AWS regiões e zonas de disponibilidade do Amazon DocumentDB.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/docdb-regions-and-azs.png)


### Zonas de disponibilidade
<a name="what-is-availability-zones"></a>

Cada AWS região contém vários locais distintos chamados de *zonas de disponibilidade*. Além de ser projetada para ser isolada das falhas de outras zonas de disponibilidade, cada zona de disponibilidade fornece conectividade de rede de baixa latência e baixo custo para outras zonas de disponibilidade da mesma região. Ao executar instâncias para um cluster em várias zonas de disponibilidade, você pode proteger suas aplicações contra o evento improvável de falha de uma zona de disponibilidade.

A arquitetura do Amazon DocumentDB separa armazenamento e computação. Para a camada de armazenamento, o Amazon DocumentDB replica seis cópias dos seus dados em três AWS zonas de disponibilidade. Por exemplo, se você estiver executando um cluster do Amazon DocumentDB em uma região que ofereça suporte apenas a duas zonas de disponibilidade, seu armazenamento de dados será replicado de seis maneiras em três zonas de disponibilidade, mas suas instâncias de computação estarão disponíveis somente em duas zonas de disponibilidade.

 A tabela a seguir lista o número de zonas de disponibilidade que você pode usar em uma determinada Região da AWS para provisionar instâncias de computação para seu cluster.


| Nome da região | Região | Zonas de disponibilidade (computação) | 
| --- | --- | --- | 
| Leste dos EUA (Ohio) | `us-east-2` | 3 | 
| Leste dos EUA (Norte da Virgínia) | `us-east-1` | 6 | 
| Oeste dos EUA (Oregon) | `us-west-2` | 4 | 
| África (Cidade do Cabo) | `af-south-1` | 3 | 
| América do Sul (São Paulo) | `sa-east-1` | 3 | 
| Ásia-Pacífico (Hong Kong) | `ap-east-1` | 3 | 
| Ásia-Pacífico (Hyderabad) | `ap-south-2` | 3 | 
| Ásia-Pacífico (Malásia) | `ap-southeast-5` | 3 | 
| Ásia-Pacífico (Mumbai) | `ap-south-1` | 3 | 
| Ásia-Pacífico (Osaka) | `ap-northeast-3` | 3 | 
| Ásia-Pacífico (Seul) | `ap-northeast-2` | 4 | 
| Ásia-Pacífico (Singapura) | `ap-southeast-1` | 3 | 
| Ásia-Pacífico (Sydney) | `ap-southeast-2` | 3 | 
| Ásia-Pacífico (Jacarta) | `ap-southeast-3` | 3 | 
| Ásia-Pacífico (Melbourne) | `ap-southeast-4` | 3 | 
| Ásia-Pacífico (Tailândia) | `ap-southeast-7` | 3 | 
| Ásia-Pacífico (Tóquio) | `ap-northeast-1` | 3 | 
| Canadá (Central) | `ca-central-1` | 3 | 
| Região China (Pequim) | `cn-north-1` | 3 | 
| China (Ningxia) | `cn-northwest-1` | 3 | 
| Europa (Frankfurt) | `eu-central-1` | 3 | 
| Europa (Zurique) | `eu-central-2` | 3 | 
| Europa (Irlanda) | `eu-west-1` | 3 | 
| Europa (Londres) | `eu-west-2` | 3 | 
| Europa (Milão) | `eu-south-1` | 3 | 
| Europa (Paris) | `eu-west-3` | 3 | 
| Europa (Espanha) | `eu-south-2` | 3 | 
| Europa (Estocolmo) | `eu-north-1` | 3 | 
| México (Centro) | `mx-central-1` | 3 | 
| Oriente Médio (Emirados Árabes Unidos) | `me-central-1` | 3 | 
| Israel (Tel Aviv) | `il-central-1` | 3 | 
| AWS GovCloud (Oeste dos EUA) | `us-gov-west-1` | 3 | 
| AWS GovCloud (Leste dos EUA) | `us-gov-east-1` | 3 | 

## Definição de preço do Amazon DocumentDB
<a name="docdb-pricing"></a>

Os clusters do Amazon DocumentDB são faturados com base nos seguintes componentes: 
+ **Horas de instância (por hora)**: com base na classe da instância (por exemplo, `db.r5.xlarge`). A definição de preço está listada em uma base por hora, mas é calculada em segundos e mostra o tempo no formato decimal. O uso do Amazon DocumentDB é faturado em incrementos de um segundo, com um mínimo de dez minutos. Para obter mais informações, consulte [Gerenciar classes de instância](db-instance-classes.md). 
+ **Solicitações de E/S (por 1 milhão de solicitações por mês)** — Número total de I/O solicitações de armazenamento que você faz em um ciclo de cobrança.
+ **Armazenamento de backup (por GiB por mês)**: o armazenamento de backup é o armazenamento associado a backups automatizados de banco de dados e a qualquer DB snapshot ativo que você tenha feito. Aumentar seu período de retenção de backup ou fazer snapshots de bancos de dados adicionais aumenta o armazenamento de backup utilizado por seu banco de dados. O armazenamento de backup é medido em GB-meses e por segundo não se aplica. Para obter mais informações, consulte [Backup e restauração no Amazon DocumentDB](backup_restore.md). 
+ **Transferência de dados (por GB)** — Transferência de dados para dentro e para fora da sua instância de ou para a Internet ou outras AWS regiões.

Para obter informações detalhadas, consulte [Preços do Amazon DocumentDB](https://aws.amazon.com/documentdb/pricing/).

### Teste gratuito
<a name="free-trial"></a>

É possível testar o Amazon DocumentDB gratuitamente usando a avaliação gratuita de 1 mês. Para obter mais informações, consulte Avaliação gratuita em [Preços do Amazon DocumentDB](https://aws.amazon.com/documentdb/pricing/) ou consulte as [Perguntas frequentes sobre a avaliação gratuita do Amazon DocumentDB](https://aws.amazon.com/documentdb/free-trial/).

## Monitoramento
<a name="what-is-monitoring"></a>

Existem várias maneiras de controlar o desempenho e a integridade de uma instância. Você pode usar o CloudWatch serviço gratuito da Amazon para monitorar o desempenho e a integridade de uma instância. É possível encontrar gráficos de performance no console do Amazon DocumentDB. É possível assinar eventos do Amazon DocumentDB para obter notificações quando ocorrerem alterações em uma instância, um snapshot, um grupo de parâmetros ou um grupo de segurança.

Para obter mais informações, consulte as informações a seguir:
+ [Monitorando o Amazon DocumentDB com CloudWatch](cloud_watch.md)
+ [Log de chamadas de API do Amazon DocumentDB com o AWS CloudTrail](logging-with-cloudtrail.md)

## Interfaces
<a name="what-is-interfaces"></a>

Há várias maneiras de interagir com o Amazon DocumentDB, incluindo o Console de gerenciamento da AWS e o. AWS CLI

### Console de gerenciamento da AWS
<a name="what-is-console"></a>

 Console de gerenciamento da AWS É uma interface de usuário simples baseada na web. É possível gerenciar os clusters e as instâncias no console sem necessidade de programação. [Para acessar o console do Amazon DocumentDB, faça login Console de gerenciamento da AWS e abra o console do Amazon DocumentDB em /docdb. https://console.aws.amazon.com](https://console.aws.amazon.com/docdb) 

### AWS CLI
<a name="what-is-cli"></a>

Você pode usar o AWS Command Line Interface (AWS CLI) para gerenciar seus clusters e instâncias do Amazon DocumentDB. Com o mínimo de configuração, você pode começar a usar todas as funcionalidades fornecidas pelo console do Amazon DocumentDB do seu programa de terminal favorito.
+ Para instalar o AWS CLI, consulte [Instalação da interface de linha de AWS comando](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).
+ Para começar a usar o AWS CLI para o Amazon DocumentDB, consulte [Referência de interface de linha de AWS comando para o Amazon DocumentDB](https://docs.aws.amazon.com/cli/latest/reference/docdb/index.html).

### Drivers do MongoDB
<a name="what-is-mongodb-drivers"></a>

Para desenvolver e gravar aplicações em um cluster do Amazon DocumentDB, você também pode usar os drivers do MongoDB com o Amazon DocumentDB. Para obter mais informações, consulte a guia da shell do MongoDB em [Conectar-se com o TLS habilitado](connect_programmatically.md#connect_programmatically-tls_enabled) ou [Conectar-se com o TLS desabilitado](connect_programmatically.md#connect_programmatically-tls_disabled).

## Próximas etapas
<a name="what-is-next"></a>

Nas seções anteriores, você conheceu os componentes de infraestrutura básicos que o Amazon DocumentDB oferece. O que você deve fazer em seguida? Dependendo de suas circunstâncias, consulte um dos tópicos a seguir para começar:
+ Comece a usar o Amazon DocumentDB criando um cluster e uma instância usando. CloudFormation [Início rápido do Amazon DocumentDB usando CloudFormation](quick_start_cfn.md)
+ Comece a usar o Amazon DocumentDB criando um cluster e uma instância usando as instruções no nosso [Guia de conceitos básicos](get-started-guide.md).
+ Comece a usar o Amazon DocumentDB criando um cluster elástico usando as instruções na [Como iniciar com clusters elásticos do Amazon DocumentDB](elastic-get-started.md).
+ Migre sua implementação do MongoDB para o Amazon DocumentDB usando as orientações em [Migrar para o Amazon DocumentDB](docdb-migration.md)

# Amazon DocumentDB: como funciona
<a name="how-it-works"></a>

O Amazon DocumentDB (compativel com MongoDB) é um serviço de banco de dados totalmente gerenciado compatível com o MongoDB. Com o Amazon DocumentDB, você pode executar o mesmo código de aplicação e usar os mesmos drivers e ferramentas que você usa com o MongoDB. O Amazon DocumentDB é compatível com o MongoDB 3.6, 4.0, 5.0 e 8.0.

**Topics**
+ [Endpoints do Amazon DocumentDB](#how-it-works.endpoints)
+ [Suporte a TLS](#how-it-works.ssl)
+ [Armazenamento do Amazon DocumentDB](#how-it-works.storage)
+ [Replicação do Amazon DocumentDB](#how-it-works.replication)
+ [Confiabilidade do Amazon DocumentDB](#how-it-works.reliability)
+ [Opções de preferência de leitura](#durability-consistency-isolation)
+ [Exclusões de TTL](#how-it-works.ttl-deletes)
+ [Recursos faturáveis](#billing)

Ao usar o Amazon DocumentDB, você começa criando um *cluster*. Um cluster consiste em zero ou mais instâncias de banco de dados e em um volume de cluster que gerencia os dados para essas instâncias. Um *volume de cluster* do Amazon DocumentDB é um volume de armazenamento de banco de dados virtual que abrange várias zonas de disponibilidade. Cada zona de disponibilidade tem uma cópia de dados do cluster.

Um cluster do Amazon DocumentDB consiste em dois componentes:
+ **Volume de cluster** — Usa um serviço de armazenamento nativo de nuvem para replicar dados de seis maneiras em três zonas de disponibilidade, fornecendo armazenamento resiliente e disponível. Um cluster do Amazon DocumentDB tem exatamente um volume de cluster, que pode armazenar até 128 TiB de dados.
+ **Instâncias** — Fornecem a potência do processamento para o banco de dados, gravando dados e lendo dados do volume de armazenamento do cluster. Um cluster do Amazon DocumentDB pode ter de 0–16 instâncias. 

Instâncias atendem a uma das duas funções:
+ **Instância principal** — Oferece suporte a operações de leitura e gravação e executa todas as modificações de dados no volume do cluster. Cada cluster do Amazon DocumentDB tem uma instância primária.
+ **Instância de réplica** — Oferece suporte a operações somente leitura. Um cluster do Amazon DocumentDB pode ter até 15 réplicas, além da instância principal. Ter várias réplicas permite distribuir workloads de leitura. Além disso, ao colocar réplicas em zonas de disponibilidade separadas, você também aumenta a disponibilidade do cluster.

O diagrama a seguir ilustra a relação entre o volume do cluster, a instância principal e as réplicas em um cluster do Amazon DocumentDB:

![\[Endpoints do Amazon DocumentDB, incluindo os de cluster, de leitor e de instância.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/docdb-endpoint-types.png)


As instâncias de cluster não precisam ser da mesma classe de instância e podem ser provisionadas e encerradas conforme desejado. Essa arquitetura permite escalar a capacidade computacional do cluster, independentemente do armazenamento.

Quando a aplicação grava dados na instância principal, ela executa uma gravação durável no volume do cluster. Em seguida, ele replica o estado dessa gravação (não os dados) em cada réplica ativa. As réplicas do Amazon DocumentDB não participam do processamento de gravações e, portanto, as réplicas do Amazon DocumentDB são vantajosas para a escalabilidade de leitura. As leituras das réplicas do Amazon DocumentDB são eventualmente consistentes com o atraso mínimo da réplica, geralmente menos de 100 milissegundos após a instância principal gravar os dados. É garantido que as leituras das réplicas sejam lidas na ordem em que foram gravadas na instância principal. O atraso de réplica varia dependendo da taxa de alteração de dados, e períodos de alta atividade de gravação podem aumentar o atraso da réplica. Para obter mais informações, consulte as métricas `ReplicationLag` em [Métricas do Amazon DocumentDB](cloud_watch.md#cloud_watch-metrics_list). 

## Endpoints do Amazon DocumentDB
<a name="how-it-works.endpoints"></a>

O Amazon DocumentDB fornece várias opções de conexão para atender a uma ampla variedade de casos de uso. Para se conectar a uma instância em um cluster do Amazon DocumentDB, você especifica o endpoint da instância. Um *endpoint* é um endereço de host e um número de porta, separados por dois-pontos.

Recomendamos que a conexão com o cluster use o endpoint do cluster e o modo de conjunto de réplicas (consulte [Conectar-se ao Amazon DocumentDB como um conjunto de réplicas](connect-to-replica-set.md)), a menos que você tenha um caso de uso específico para a conexão com o endpoint de leitor ou um endpoint da instância. Para rotear solicitações para suas réplicas, escolha uma configuração de preferência de leitura do driver que maximize a escalabilidade de leitura, sem deixar de atender aos requisitos de consistência de leitura da aplicação. A preferência de leitura `secondaryPreferred` permite leituras de réplica e libera a instância primária para trabalhar mais.

Os endpoints a seguir estão disponíveis em um cluster do Amazon DocumentDB.

### Endpoint do cluster
<a name="how-it-works.endpoints.cluster"></a>

O *endpoint de cluster* conecta-se à instância principal atual do cluster. O endpoint do cluster pode ser usado para operações de leitura e gravação. Um cluster do Amazon DocumentDB tem exatamente um endpoint de cluster.

O endpoint de cluster dá suporte a failover para conexões de leitura e gravação para o cluster. Se a instância principal atual do cluster falhar e o cluster tiver pelo menos uma réplica de leitura ativa, o endpoint do cluster redirecionará automaticamente as solicitações de conexão para uma nova instância principal. Ao estabelecer a conexão com o cluster do Amazon DocumentDB, recomendamos que você use o endpoint do cluster e o modo de conjunto de réplicas (consulte [Conectar-se ao Amazon DocumentDB como um conjunto de réplicas](connect-to-replica-set.md)).

Veja a seguir um exemplo de endpoint do cluster do Amazon DocumentDB:

```
sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017
```

O exemplo a seguir é um exemplo de string de conexão utilizando esse endpoint de cluster:

```
mongodb://username:password@sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017
```

Para obter informações sobre como localizar os endpoints de um cluster, consulte [Localizar os endpoints de um cluster](db-cluster-endpoints-find.md).

### Endpoint de leitor
<a name="how-it-works.endpoints.reader"></a>

O *endpoint do leitor* balanceia a carga de conexões somente leitura em todas as réplicas disponíveis no cluster. Um endpoint de leitor de cluster funcionará como o endpoint do cluster se você estiver se conectando por meio do modo `replicaSet`, ou seja, na cadeia de conexão, o parâmetro do conjunto de réplicas é `&replicaSet=rs0`. Nesse caso, será possível realizar operações de gravação no primário. No entanto, se você se conectar ao cluster especificando `directConnection=true`, a tentativa de realizar uma operação de gravação em uma conexão com o endpoint do leitor ocasionará erro. Um cluster do Amazon DocumentDB tem exatamente um endpoint de leitor.

Se o cluster contiver apenas uma instância (principal), o endpoint do leitor se conectará à instância principal. Quando você adicionar uma instância de réplica ao cluster do Amazon DocumentDB, o endpoint do leitor abrirá as conexões somente leitura para a nova réplica depois que ela estiver ativa.

Veja a seguir um exemplo de endpoint de leitor para um cluster do Amazon DocumentDB:

```
sample-cluster.cluster-ro-123456789012.us-east-1.docdb.amazonaws.com:27017
```

O exemplo a seguir é um exemplo de string de conexão utilizando um endpoint de leitor:

```
mongodb://username:password@sample-cluster.cluster-ro-123456789012.us-east-1.docdb.amazonaws.com:27017 
```

O endpoint do leitor balanceia a carga de conexões somente leitura, e não solicitações de leitura. Se algumas conexões do endpoint de leitor forem mais utilizadas do que outras, suas solicitações de leitura poderão não ser igualmente equilibradas entre as instâncias do cluster. É recomendável distribuir solicitações conectando-se ao endpoint do cluster como um conjunto de réplicas e utilizando a opção de preferência de leitura secondaryPreferred. 

Para obter informações sobre como localizar os endpoints de um cluster, consulte [Localizar os endpoints de um cluster](db-cluster-endpoints-find.md).

### Endpoint da instância
<a name="how-it-works.endpoints.instance"></a>

Um *endpoint da instância* se conecta a uma instância específica no cluster. O endpoint da instância para a instância principal atual pode ser usado para operações de leitura e gravação. No entanto, a tentativa de executar operações de gravação em um endpoint da instância para uma réplica de leitura resulta em um erro. Um cluster do Amazon DocumentDB tem um endpoint de instância por instância ativa.

Um endpoint de instância oferece controle direto sobre conexões para uma instância específica, para cenários nos quais o endpoint de cluster ou o endpoint de leitor talvez não seja apropriado. Um exemplo de caso de uso é o provisionamento de uma workload de analytics periódica somente leitura. Você pode provisionar uma instância de larger-than-normal réplica, conectar-se diretamente à nova instância maior com seu endpoint de instância, executar as consultas de análise e, em seguida, encerrar a instância. Usar o endpoint da instância impede que o tráfego de analytics cause impacto em outras instâncias do cluster.

Este é um exemplo de endpoint de instância para uma única instância em um cluster do Amazon DocumentDB:

```
sample-instance.123456789012.us-east-1.docdb.amazonaws.com:27017
```

O exemplo a seguir é um exemplo de string de conexão utilizando esse endpoint da instância:

```
mongodb://username:password@sample-instance.123456789012.us-east-1.docdb.amazonaws.com:27017 
```

**nota**  
A função de uma instância como principal ou de réplica pode mudar devido a um evento de failover. As aplicações nunca devem presumir que um endpoint de instância específico seja a instância principal. Não recomendamos a conexão com endpoints de instância para aplicações de produção. Em vez disso, recomendamos a conexão com o cluster usando o endpoint do cluster e o modo de conjunto de réplicas (consulte [Conectar-se ao Amazon DocumentDB como um conjunto de réplicas](connect-to-replica-set.md)). Para obter mais controle avançado da prioridade de failover da instância, consulte [Entender a tolerância a falhas de cluster do Amazon DocumentDB](db-cluster-fault-tolerance.md). 

Para obter informações sobre como localizar os endpoints de um cluster, consulte [Localizar o endpoint de uma instância](db-instance-endpoint-find.md).

### Modo de conjuntos de réplicas
<a name="replica-set-mode"></a>

É possível se conectar ao endpoint de cluster do Amazon DocumentDB no modo de conjunto de réplicas especificando o nome do conjunto de réplicas `rs0`. A conexão no modo de conjunto de réplicas fornece a capacidade de especificar as opções Read Concern, Write Concern e Read Preference. Para obter mais informações, consulte [Consistência de leituras](#durability-consistency-isolation.read-consistency).

O exemplo a seguir é de uma string de conexão conectando-se no modo de conjunto de réplicas:

```
mongodb://username:password@sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0
```

Quando você se conecta no modo de conjunto de réplicas, o cluster do Amazon DocumentDB aparece para os seus drivers e clientes como um conjunto de réplicas. As instâncias adicionadas e removidas do cluster do Amazon DocumentDB são refletidas automaticamente na configuração do conjunto de réplicas.

Cada cluster do Amazon DocumentDB consiste em um único conjunto de réplicas com o nome padrão `rs0`. O nome do conjunto de réplicas não pode ser modificado.

A conexão ao endpoint do cluster no modo de conjunto de réplicas é o método recomendado para uso geral.

**nota**  
Todas as instâncias em um cluster do Amazon DocumentDB atendem a mesma porta TCP para conexões.

## Suporte a TLS
<a name="how-it-works.ssl"></a>

Para obter mais detalhes sobre a conexão ao Amazon DocumentDB usando o Transport Layer Security (TLS), consulte [Criptografia de dados em trânsito](security.encryption.ssl.md).

## Armazenamento do Amazon DocumentDB
<a name="how-it-works.storage"></a>

Os dados do Amazon DocumentDB são armazenados em um *volume de cluster*, que é um único volume virtual que usa unidades de estado sólido ()SSDs. Um volume de cluster consiste em seis cópias dos dados, que são replicados automaticamente em diversas zonas de disponibilidade em uma única região da Região da AWS. Essa replicação ajuda a garantir que seus dados sejam resilientes, com menor possibilidade de perda de dados. Isso também ajuda a garantir que o cluster esteja mais disponível durante um failover, pois as cópias dos dados já existem em outras zonas de disponibilidade. Essas cópias podem continuar a atender às solicitações de dados para as instâncias no cluster do Amazon DocumentDB. 

### Como o armazenamento de dados do é faturado
<a name="how-it-works-storage-billing"></a>

O Amazon DocumentDB aumenta automaticamente o tamanho de um volume de cluster à medida que a quantidade de dados aumenta. Um volume de cluster do Amazon DocumentDB pode aumentar para um tamanho máximo de 128 TiB. No entanto, você só será cobrado pelo espaço usado em um volume de cluster do Amazon DocumentDB. A partir do Amazon DocumentDB 4.0, quando os dados são removidos, como ao excluir uma coleção ou índice, o espaço total alocado diminui em uma quantidade equivalente. Assim, é possível reduzir as cobranças de armazenamento excluindo coleções, índices e bancos de dados que não são mais necessários. Na versão 3.6 do Amazon DocumentDB, o volume do cluster pode reutilizar o espaço que for liberado quando você remover dados, mas o volume em si nunca diminui. Como resultado, na versão 3.6, é possível não testemunhar alteração nenhuma no armazenamento ao descartar uma coleção ou índice, mesmo que o espaço liberado seja reutilizado. 

**nota**  
Com o Amazon DocumentDB 3.6, os custos de armazenamento são baseados no “limite máximo” de armazenamento (o valor máximo que foi alocado para o cluster Amazon DocumentDB a qualquer momento). É possível gerenciar custos evitando práticas de ETL que criam grandes volumes de informações temporárias ou que carregam grandes volumes de novos dados antes de remover dados antigos desnecessários. Se a remoção de dados de um cluster do Amazon DocumentDB resultar em uma quantidade substancial de espaço alocado mas não utilizado, a redefinição do nível mais alto da marca d'água vai exigir o despejo de dados lógicos e a restauração de um novo cluster usando uma ferramenta como `mongodump` ou `mongorestore`. A criação e restauração de um snapshot não reduz o armazenamento alocado, pois o layout físico do armazenamento subjacente permanece o mesmo no snapshot restaurado.

**nota**  
O uso de utilitários como `mongodump` e `mongorestore` incorre em I/O cobranças com base no tamanho dos dados que estão sendo lidos e gravados no volume de armazenamento.

[Para obter informações sobre o armazenamento de dados e os preços do Amazon DocumentDB, consulte os I/O preços e preços do [Amazon DocumentDB (com compatibilidade com o MongoDB](https://aws.amazon.com/documentdb/pricing)). FAQs](https://aws.amazon.com/documentdb/faqs/#Pricing)

## Replicação do Amazon DocumentDB
<a name="how-it-works.replication"></a>

Em um cluster do Amazon DocumentDB, cada instância de réplica expõe um endpoint independente. Esses endpoints de réplica fornecem acesso somente leitura aos dados no volume do cluster. Eles permitem escalar a workload de leitura para os dados em várias instâncias replicadas. Eles também ajudam a melhorar o desempenho das leituras de dados e a aumentar a disponibilidade dos dados em seu cluster do Amazon DocumentDB. As réplicas do Amazon DocumentDB também são alvos de failover e são promovidas rapidamente se a instância primária do seu cluster do Amazon DocumentDB falhar. 

## Confiabilidade do Amazon DocumentDB
<a name="how-it-works.reliability"></a>

O Amazon DocumentDB foi projetado para ser confiável, durável e tolerante a falhas. (Para melhorar a disponibilidade, você deve configurar seu cluster Amazon DocumentDB para que ele tenha várias instâncias de réplica em diferentes zonas de disponibilidade.) O Amazon DocumentDB inclui vários recursos automáticos que o tornam uma solução de banco de dados confiável. 

### Reparo automático de armazenamento
<a name="how-it-works.reliability.storage-auto-repair"></a>

O Amazon DocumentDB mantém várias cópias dos dados em três zonas de disponibilidade, reduzindo bastante a chance de perda de dados devido a uma falha de armazenamento. O Amazon DocumentDB detecta automaticamente as falhas no volume do cluster. Quando um segmento de um volume de cluster falha, o Amazon DocumentDB repara imediatamente o segmento. Ele usa os dados dos outros volumes que compõem o volume do cluster para ajudar a garantir que os dados no segmento reparado sejam atuais. Como resultado, o Amazon DocumentDB evita a perda de dados e reduz a necessidade de realizar uma point-in-time restauração para se recuperar de uma falha na instância. 

### Aquecimento de cache possível de recuperar
<a name="how-it-works.reliability.survivable-cache-warming"></a>

O Amazon DocumentDB gerencia seu cache de páginas em um processo separado do banco de dados, de modo que o cache de páginas possa sobreviver independentemente do banco de dados. No evento improvável de uma falha no banco de dados, o cache da página permanece na memória. Isso garante que o grupo de buffers seja aquecido com o estado mais atual quando o banco de dados é reiniciado.

### Recuperação de falha
<a name="how-it-works.reliability.crash-recovery"></a>

O Amazon DocumentDB foi projetado para se recuperar de uma falha quase instantaneamente e continuar fornecendo seus dados de aplicações. O Amazon DocumentDB executa a recuperação de falhas de forma assíncrona em threads paralelos, de maneira que o banco de dados seja aberto e fique disponível imediatamente após a falha. 

### Governança de recursos
<a name="how-it-works.reliability.resource-governance"></a>

O Amazon DocumentDB protege os recursos necessários para executar processos críticos no serviço, como verificações de integridade. Para fazer isso, e quando uma instância estiver com alta pressão de memória, o Amazon DocumentDB limitará as solicitações. Como resultado, algumas operações podem ser colocadas em fila para esperar que a pressão da memória diminua. Se a pressão da memória continuar, as operações em fila poderão atingir o tempo limite. Você pode monitorar se o serviço está limitando ou não as operações devido à falta de memória com as seguintes CloudWatch métricas:`LowMemThrottleQueueDepth`,,`LowMemThrottleMaxQueueDepth`,`LowMemNumOperationsThrottled`. `LowMemNumOperationsTimedOut` Para obter mais informações, consulte Monitoramento do Amazon DocumentDB com. CloudWatch Se você observar uma pressão de memória sustentada em sua instância como resultado das LowMem CloudWatch métricas, recomendamos que você aumente sua instância para fornecer memória adicional para sua carga de trabalho.

## Opções de preferência de leitura
<a name="durability-consistency-isolation"></a>

O Amazon DocumentDB usa um serviço de armazenamento compartilhado nativo de nuvem que replica os dados seis vezes em três zonas de disponibilidade para fornecer altos níveis de durabilidade. O Amazon DocumentDB não depende da replicação de dados em várias instâncias para obter durabilidade. Os dados do cluster são duráveis, quer contenham uma única instância ou 15 instâncias.

**Topics**
+ [Durabilidade de gravação](#durability-consistency-isolation.write-durability)
+ [Isolamento de leitura](#durability-consistency-isolation.read-isolation)
+ [Consistência de leituras](#durability-consistency-isolation.read-consistency)
+ [Alta disponibilidade](#durability-consistency-isolation.high-availability)
+ [Leituras de escalabilidade](#durability-consistency-isolation.scaling-reads)

### Durabilidade de gravação
<a name="durability-consistency-isolation.write-durability"></a>

O Amazon DocumentDB usa um sistema de armzenamento exclusivo, distribuído, tolerante a falhas e de recuperação automática. Esse sistema replica seis cópias (V = 6) de seus dados em três zonas de AWS disponibilidade para fornecer alta disponibilidade e durabilidade. Ao gravar dados, o Amazon DocumentDB garante que todas as gravações sejam gravadas de forma durável na maioria dos nós antes de confirmar a gravação para o cliente. Se você estiver executando um conjunto de réplicas do MongoDB de três nós, o uso de uma Write Concern de `{w:3, j:true}` produzirá a melhor configuração possível em comparação com o Amazon DocumentDB.

As gravações em um cluster do Amazon DocumentDB devem ser processadas pela instância principal do cluster. A tentativa de gravar em um leitor resulta em um erro. Uma gravação reconhecida de uma instância principal do Amazon DocumentDB é durável e não pode ser revertida. O Amazon DocumentDB é altamente durável por padrão e não oferece suporte a uma opção de gravação não durável. Você não pode modificar o nível de durabilidade (ou seja, preocupação de gravação). O Amazon DocumentDB ignora w=anything e é efetivamente w: 3 e j: true. Você não pode reduzi-lo.

Devido à separação de armazenamento e computação na arquitetura do Amazon DocumentDB, um cluster com uma única instância é resiliente. A durabilidade é processada na camada de armazenamento. Como resultado, um cluster do Amazon DocumentDB com uma única instância e um com três instâncias alcança o mesmo nível de durabilidade. É possível configurar o cluster para seu caso de uso específico e, ao mesmo tempo, proporcionar resiliência aos seus dados.

As gravações em um cluster do Amazon DocumentDB são atômicas em um único documento. 

O Amazon DocumentDB não oferece suporte à opção `wtimeout` e não retornará um erro se um valor for especificado. É garantido que as gravações na instância principal do Amazon DocumentDB não sejam bloqueadas indefinidamente.

### Isolamento de leitura
<a name="durability-consistency-isolation.read-isolation"></a>

As leituras de uma instância do Amazon DocumentDB retornam apenas dados que sejam duráveis antes do início da consulta. As leituras nunca retornam dados modificados depois que a consulta começa a execução, nem as leituras contaminadas são possíveis sob qualquer circunstância.

### Consistência de leituras
<a name="durability-consistency-isolation.read-consistency"></a>

Os dados lidos em um cluster do Amazon DocumentDB são duráveis e não serão revertidos. É possível modificar a consistência de leitura para as leituras do Amazon DocumentDB especificando a preferência de leitura para a solicitação ou conexão. O Amazon DocumentDB não oferece suporte a uma opção de leitura não durável.

As leituras da instância primária de um cluster Amazon DocumentDB são altamente consistentes em condições operacionais normais e consistentes read-after-write. Se ocorrer um evento de failover entre a leitura e a gravação subsequentes, o sistema poderá retornar em breve uma leitura que não seja altamente consistente. Todas as leituras a partir de uma réplica de leitura são, por fim, consistentes e retornam os dados na mesma ordem e, geralmente, com atraso de replicação inferior a 100 ms.

#### Preferências de leitura do Amazon DocumentDB
<a name="durability-consistency-isolation.read-preferences"></a>

O Amazon DocumentDB oferece suporte à configuração de uma opção de preferência de leitura apenas ao ler dados do endpoint do cluster no modo de conjunto de réplicas. Definir uma opção de preferência de leitura afeta como o cliente ou o driver do MongoDB encaminha solicitações de leitura para instâncias no cluster do Amazon DocumentDB. É possível definir opções de preferência de leitura para uma consulta específica ou como uma opção geral no driver do MongoDB. (Consulte a documentação do cliente ou do driver para obter instruções sobre como definir uma opção de preferência de leitura.)

Se o cliente ou o driver não estiver se conectando a um endpoint de cluster do Amazon DocumentDB no modo de conjunto de réplicas, o resultado da especificação de uma preferência de leitura será indefinido.

O Amazon DocumentDB não é compatível com a configuração de *conjuntos de tags* como uma preferência de leitura.

**Opções de preferência de leitura compatíveis**
+ **`primary`**— A especificação de uma preferência de leitura `primary` ajuda a garantir que todas as leituras sejam encaminhadas para a instância principal do cluster. Se a instância principal estiver indisponível, a operação de leitura falhará. Uma preferência de `primary` leitura gera read-after-write consistência e é apropriada para casos de uso que priorizam a read-after-write consistência em vez da alta disponibilidade e da escala de leitura.

  O exemplo a seguir especifica uma preferência de leitura `primary`:

  ```
  db.example.find().readPref('primary')
  ```

   
+ **`primaryPreferred`**— A especificação de rotas de preferência de leitura `primaryPreferred` lê para a instância principal em operação normal. Se houver um failover principal, o cliente encaminhará solicitações para uma réplica. Uma preferência de `primaryPreferred` leitura gera read-after-write consistência durante a operação normal e, eventualmente, leituras consistentes durante um evento de failover. Uma preferência de `primaryPreferred` leitura é apropriada para casos de uso que priorizam a read-after-write consistência em relação ao escalonamento de leitura, mas ainda exigem alta disponibilidade.

  O exemplo a seguir especifica uma preferência de leitura `primaryPreferred`:

  ```
  db.example.find().readPref('primaryPreferred')
  ```

   
+ **`secondary`**— A especificação de uma preferência de leitura `secondary` garante que as leituras sejam encaminhadas apenas para uma réplica, nunca para a instância principal. Se não houver instâncias de réplica em um cluster, a solicitação de leitura falhará. Uma preferência de `secondary` leitura eventualmente gera leituras consistentes e é apropriada para casos de uso que priorizam a taxa de transferência de gravação da instância primária em detrimento da alta disponibilidade e consistência. read-after-write

  O exemplo a seguir especifica uma preferência de leitura `secondary`:

  ```
  db.example.find().readPref('secondary')
  ```

   
+ **`secondaryPreferred`**— A especificação de uma preferência de leitura `secondaryPreferred` garante que as leituras sejam encaminhadas para uma réplica de leitura quando uma ou mais réplicas estiverem ativas. Se não houver instâncias de réplica ativas em um cluster, a solicitação de leitura será encaminhada para a instância principal. Uma preferência de leitura `secondaryPreferred` produz leituras eventualmente consistentes quando a leitura é atendida por uma réplica de leitura. Ela gera read-after-write consistência quando a leitura é atendida pela instância primária (exceto eventos de failover). Uma preferência de `secondaryPreferred` leitura é apropriada para casos de uso que priorizam a escala de leitura e a alta disponibilidade em vez da consistência. read-after-write

  O exemplo a seguir especifica uma preferência de leitura `secondaryPreferred`:

  ```
  db.example.find().readPref('secondaryPreferred')
  ```

   
+ **`nearest`**— A especificação de uma preferência de leitura `nearest` encaminha as leituras baseadas apenas na latência medida entre o cliente e todas as instâncias no cluster do Amazon DocumentDB. Uma preferência de leitura `nearest` produz leituras eventualmente consistentes quando a leitura é atendida por uma réplica de leitura. Ela gera read-after-write consistência quando a leitura é atendida pela instância primária (exceto eventos de failover). Uma preferência de `nearest` leitura é apropriada para casos de uso que priorizam alcançar a menor latência de leitura possível e alta disponibilidade em vez de read-after-write consistência e escalabilidade de leitura.

  O exemplo a seguir especifica uma preferência de leitura `nearest`:

  ```
  db.example.find().readPref('nearest')
  ```

### Alta disponibilidade
<a name="durability-consistency-isolation.high-availability"></a>

O Amazon DocumentDB oferece suporte a configurações de cluster altamente disponíveis usando réplicas como destinos de failover para a instância principal. Se a instância principal falhar, uma réplica do Amazon DocumentDB será promovida como a nova principal, com uma breve interrupção durante a qual as solicitações de leitura e gravação feitas na instância principal falham com uma exceção.

Se o cluster do Amazon DocumentDB não incluir réplicas, a instância principal será recriada durante uma falha. No entanto, promover uma réplica do Amazon DocumentDB é muito mais rápido do que recriar a instância primária. Portanto, recomendamos que você crie uma ou mais réplicas do Amazon DocumentDB como destinos de failover.

As réplicas que devem ser usadas como destinos de failover devem ser da mesma classe de instância da instância principal. Elas devem ser provisionadas em zonas de disponibilidade diferentes da principal. É possível controlar quais réplicas são preferenciais como destinos de failover. Para obter as melhores práticas sobre como configurar o Amazon DocumentDB para alta disponibilidade, consulte [Entender a tolerância a falhas de cluster do Amazon DocumentDB](db-cluster-fault-tolerance.md).

### Leituras de escalabilidade
<a name="durability-consistency-isolation.scaling-reads"></a>

As réplicas do Amazon DocumentDB são ideais para escalabilidade de leitura. Elas são totalmente dedicadas a operações de leitura no volume de cluster, ou seja, as réplicas não processam gravações. A replicação de dados acontece dentro do volume de cluster e não entre as instâncias. Portanto, os recursos de cada réplica são dedicados ao processamento de consultas, e não às replicações e gravações de dados.

Se a aplicação precisar de mais capacidade de leitura, será possível adicionar uma réplica ao cluster rapidamente (geralmente em menos de dez minutos). Se os requisitos de capacidade de leitura diminuírem, será possível remover as réplicas desnecessárias. Com as réplicas do Amazon DocumentDB, você paga apenas pela capacidade de leitura de que precisa.

O Amazon DocumentDB oferece suporte a escalabilidade de leitura do lado do cliente por meio do uso de opções de preferência de leitura. Para obter mais informações, consulte [Preferências de leitura do Amazon DocumentDB](#durability-consistency-isolation.read-preferences).

## Exclusões de TTL
<a name="how-it-works.ttl-deletes"></a>

As exclusões de uma área de índice TTL alcançada por meio de um processo em segundo plano são o melhor esforço e não são garantidas dentro de um período de tempo específico. Fatores como tamanho de instância, utilização de recursos da instância, tamanho do documento e throughput geral podem afetar a sincronização de uma exclusão de TTL.

Quando o monitor TTL exclui seus documentos, cada exclusão resulta em custos de E/S, o que aumentará sua fatura. Se as taxas de throughput e de exclusão de TTL aumentarem, espere um aumento em sua fatura devido ao aumento no uso de E/S.

Ao criar um índice TTL em uma coleção existente, você deve excluir todos os documentos expirados antes de criar o índice. A implementação atual do TTL é otimizada para excluir uma pequena fração de documentos na coleção, o que é típico se o TTL foi ativado na coleção desde o início, e pode resultar em IOPS maior do que o necessário se um grande número de documentos precisar ser excluído de uma só vez.

Caso você não queira criar um índice TTL para excluir documentos, é possível segmentar documentos em coleções com base no tempo e simplesmente descartar essas coleções quando os documentos não forem mais necessários. Por exemplo: você pode criar uma coleção por semana e descartá-la sem incorrer em custos de E/S. Isso pode ser significativamente mais econômico do que usar um índice TTL.

## Recursos faturáveis
<a name="billing"></a>

### Identificação de recursos faturáveis do Amazon DocumentDB
<a name="billing.identifying-billable-resources"></a>

Como um serviço de banco de dados gerenciado, o Amazon DocumentDB cobra por instâncias, armazenamento, E/Ss, backups e transferência de dados. Para obter mais informações, consulte [Preços do Amazon DocumentDB (compatível com MongoDB)](https://aws.amazon.com/documentdb/pricing/). 

Para descobrir recursos faturáveis em sua conta e potencialmente excluir os recursos, você pode usar o Console de gerenciamento da AWS ou. AWS CLI

#### Usando o Console de gerenciamento da AWS
<a name="billing.identifying-billable-resources-con"></a>

Usando o Console de gerenciamento da AWS, você pode descobrir os clusters, instâncias e snapshots do Amazon DocumentDB que você provisionou para um determinado. Região da AWS

**Para descobrir clusters, instâncias e snapshots**

1. [Faça login no e abra Console de gerenciamento da AWS o console do Amazon DocumentDB em https://console.aws.amazon.com /docdb.](https://console.aws.amazon.com/docdb)

1. Para descobrir recursos faturáveis em uma região diferente da sua região padrão, no canto superior direito da tela, escolha o Região da AWS que você deseja pesquisar.   
![\[A região da Virgínia do Norte no seletor de região.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/db-cluster-console-region.png)

1. No painel de navegação, escolha o tipo de recurso faturável de interesse em: **Clusters**, **Instances (Instâncias)** ou **Snapshots**.  
![\[Clusters, instâncias e snapshots no painel de navegação.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/db-navigation-pane-clusters-instances-snapshots.png)

1. Todos os seus clusters provisionados, instâncias ou snapshots para a região são listados no painel direito. Você será cobrado por clusters, instâncias e snapshots.

#### Usando o AWS CLI
<a name="billing.identifying-billable-resources-cli"></a>

Usando o AWS CLI, você pode descobrir os clusters, instâncias e snapshots do Amazon DocumentDB que você provisionou para um determinado. Região da AWS

**Para descobrir clusters e instâncias**  
O código a seguir lista todos os clusters e instâncias para a região especificada. Se você deseja procurar clusters e instâncias em sua região padrão, omita o parâmetro `--region`.

**Example**  
Para Linux, macOS ou Unix:  

```
aws docdb describe-db-clusters \
    --region us-east-1 \
    --query 'DBClusters[?Engine==`docdb`]' | \
       grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"
```
Para Windows:  

```
aws docdb describe-db-clusters ^
    --region us-east-1 ^
    --query 'DBClusters[?Engine==`docdb`]' | ^
       grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"
```
A saída dessa operação é semelhante à seguinte.  

```
"DBClusterIdentifier": "docdb-2019-01-09-23-55-38",
        "DBInstanceIdentifier": "docdb-2019-01-09-23-55-38",
        "DBInstanceIdentifier": "docdb-2019-01-09-23-55-382",
"DBClusterIdentifier": "sample-cluster",
"DBClusterIdentifier": "sample-cluster2",
```
**Para descobrir snapshots**  
O código a seguir lista todos os snapshots para a região especificada. Se você deseja procurar snapshots em sua região padrão, omita o parâmetro `--region`.
Para Linux, macOS ou Unix:  

```
aws docdb describe-db-cluster-snapshots \
  --region us-east-1 \
  --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'
```
Para Windows:  

```
aws docdb describe-db-cluster-snapshots ^
  --region us-east-1 ^
  --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'
```
A saída dessa operação é semelhante à seguinte.  

```
[
    [
        "rds:docdb-2019-01-09-23-55-38-2019-02-13-00-06",
        "automated"
    ],
    [
        "test-snap",
        "manual"
    ]
]
```
Você só precisa excluir `manual` snapshots. Os snapshots `Automated` são excluídos quando você exclui o cluster.

### Exclusão de recursos faturáveis indesejados
<a name="billing.deleting-billable-resources"></a>

Para excluir um cluster, primeiro exclua todas as instâncias no cluster.
+ Para excluir instâncias, consulte [Excluir uma instância do Amazon DocumentDB](db-instance-delete.md). 
**Importante**  
Mesmo se você excluir as instâncias em um cluster, você ainda será cobrado pelo uso de armazenamento e backup associado a esse cluster. Para interromper todas as cobranças, você também deverá excluir seu cluster e snapshots manuais.
+ Para excluir clusters, consulte [Excluir um cluster do Amazon DocumentDB](db-cluster-delete.md). 
+ Para excluir snapshots manuais, consulte [Exclusão de um snapshot de cluster](backup_restore-delete_cluster_snapshot.md). 

# O que é um banco de dados de documentos?
<a name="what-is-document-db"></a>

Alguns desenvolvedores não pensam em seu modelo de dados em termos de linhas e colunas normalizadas. Normalmente, na camada da aplicação, os dados são representados como um documento JSON, pois é mais intuitivo para os desenvolvedores pensarem em seu modelo de dados como um documento. 

A popularidade dos bancos de dados de documentos cresceu porque eles permitem que você mantenha a persistência dos dados em um banco de dados usando o mesmo formato de modelo de documento usado no código da aplicação. Os bancos de dados de documentos fornecem recursos poderosos e intuitivos APIs para um desenvolvimento flexível e ágil.

**Topics**
+ [Casos de uso](document-database-use-cases.md)
+ [Noções básicas sobre documentos](document-database-documents-understanding.md)
+ [Trabalhar com documentos](document-database-working-with-documents.md)

# Casos de uso do banco de dados de documentos
<a name="document-database-use-cases"></a>

Seu caso de uso indica se você precisa de um banco de dados de documentos ou algum outro tipo de banco de dados para gerenciar os dados. Os bancos de dados de documentos são úteis para workloads que exigem um esquema flexível para desenvolvimento rápido e iterativo. A seguir estão alguns exemplos de casos de uso para os quais os bancos de dados de documentos podem fornecer vantagens significativas:

**Topics**
+ [Perfis de usuário](#document-databases-use-cases.user-profiles)
+ [Big data em tempo real](#document-databases-use-cases.big-data)
+ [Gerenciamento de conteúdo](#document-databases-use-cases.content-management)

## Perfis de usuário
<a name="document-databases-use-cases.user-profiles"></a>

Como os bancos de dados de documentos têm um esquema flexível, eles podem armazenar documentos com atributos e valores de dados diferentes. Os bancos de dados de documentos são uma solução prática para perfis online nos quais usuários diferentes fornecem tipos de informações diferentes. Usando um banco de dados de documentos, você pode armazenar o perfil de cada usuário de forma eficiente, armazenando apenas os atributos específicos de cada usuário.

Suponha que um usuário opte por adicionar ou remover informações do perfil. Nesse caso, o documento pode ser facilmente substituído por uma versão atualizada que contenha quaisquer atributos e dados adicionados recentemente ou que omita quaisquer atributos e dados omitidos recentemente. Os bancos de dados de documentos gerenciam facilmente esse nível de individualidade e fluidez.

## Big data em tempo real
<a name="document-databases-use-cases.big-data"></a>

Historicamente, a capacidade de extrair informações de dados operacionais era prejudicada pelo fato de bancos de dados operacionais e bancos de dados analíticos serem mantidos em ambientes diferentes — operacionais e, respectivamente. business/reporting A capacidade de extrair informações operacionais em tempo real é fundamental em um ambiente de negócios altamente competitivo. Ao usar bancos de dados de documentos, uma empresa pode armazenar e gerenciar dados operacionais de qualquer origem e, simultaneamente, alimentar os dados para o mecanismo de BI escolhido para análise. Não há necessidade de ter dois ambientes.

## Gerenciamento de conteúdo
<a name="document-databases-use-cases.content-management"></a>

Para gerenciar o conteúdo com eficiência, é necessário coletar e agregar o conteúdo de várias fontes e, em seguida, enviá-lo ao cliente. Devido ao esquema flexível, os bancos de dados de documentos são perfeitos para coletar e armazenar qualquer tipo de dados. É possível usá-los para criar e incorporar novos tipos de conteúdo, incluindo conteúdo gerado pelo usuário, como imagens, comentários e vídeos.

# Noções básicas sobre documentos
<a name="document-database-documents-understanding"></a>

Os bancos de dados de documentos são usados para armazenar dados semiestruturados como um documento em vez de normalizar dados em várias tabelas, cada uma com uma estrutura única e fixa, como em um banco de dados relacional. Os documentos armazenados em um banco de dados de documentos usam pares de chave/valor aninhados para fornecer a estrutura ou o esquema do documento. No entanto, diferentes tipos de documentos podem ser armazenados no mesmo banco de dados de documentos, atendendo assim ao requisito de processamento de dados semelhantes em formatos diferentes. Por exemplo, como cada documento é autodescritivo, os documentos codificados em JSON de um armazenamento on-line descritos no tópico [Exemplo de documentos em um banco de dados de documentos](#document-database-documents) podem ser armazenados no mesmo banco de dados de documentos. 

**Topics**
+ [Terminologia do SQL versus não relacional](#document-database-sql-vs-nosql-terms)
+ [Documentos simples](#document-database-documents-simple)
+ [Documentos incorporados](#document-database-documents-embeded)
+ [Exemplo de documentos em um banco de dados de documentos](#document-database-documents)
+ [Noções básicas sobre normalização em um banco de dados de documentos](#document-database-normalization)

## Terminologia do SQL versus não relacional
<a name="document-database-sql-vs-nosql-terms"></a>

A tabela a seguir compara a terminologia usada pelos bancos de dados de documentos (MongoDB) com a terminologia usada pelos bancos de dados SQL.


|  SQL  |  MongoDB  | 
| --- | --- | 
|  Tabela  |  Coleta  | 
|  Linha  |  Documento  | 
|  Coluna  |  Campo  | 
|  Chave primária  |  ObjectId  | 
|  Índice  |  Índice  | 
|  Visualizar  |  Visualizar  | 
|  Tabela ou objeto aninhado  |  Documento incorporado  | 
|  Array  |  Array  | 

## Documentos simples
<a name="document-database-documents-simple"></a>

Todos os documentos em um banco de dados de documentos são autodescritivos. Esta documentação usa documentos formatados como JSON, embora você possa usar outros meios de codificação.

Um documento simples tem um ou mais campos que estão todos no mesmo nível no documento. No exemplo a seguir, os campos `SSN`, `LName`, `FName`, `DOB`, `Street`, `City`, `State-Province`, `PostalCode` e `Country` são todos irmãos no documento.

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Street": "125 Main St.",
   "City": "Anytown",
   "State-Province": "WA",
   "PostalCode": "98117",
   "Country": "USA"
}
```

Quando as informações são organizadas em um documento simples, cada campo é gerenciado individualmente. Para recuperar o endereço de uma pessoa, é necessário recuperar `Street`, `City`, `State-Province`, `PostalCode` e `Country` como itens de dados individuais.

## Documentos incorporados
<a name="document-database-documents-embeded"></a>

Um documento complexo organiza os dados criando documentos incorporados no documento. Documentos incorporados ajudam a gerenciar dados em agrupamentos e como itens de dados individuais, o que for mais eficiente em um determinado caso. Usando o exemplo anterior, você poderia incorporar um documento `Address` no documento principal. Isso resulta na estrutura do documento a seguir:

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Address": 
   {
       "Street": "125 Main St.",
       "City": "Anytown",
       "State-Province": "WA",
       "PostalCode": "98117",
       "Country": "USA" 
   }
}
```

Agora, você pode acessar os dados no documento como campos individuais (`"SSN":`), como um documento incorporado (`"Address":`) ou como membro de um documento incorporado (`"Address":{"Street":}`).

## Exemplo de documentos em um banco de dados de documentos
<a name="document-database-documents"></a>

Como afirmado anteriormente, como cada documento em um banco de dados de documentos é autodescritivo, a estrutura dos documentos em um banco de dados de documentos pode ser diferente. Os dois documentos seguintes, um de um livro e o outro de um periódico, são estruturalmente diferentes. No entanto, ambos podem estar no mesmo banco de dados de documentos.

Veja a seguir um exemplo de documento de livro:

```
{
    "_id" : "9876543210123",
    "Type": "book",
    "ISBN": "987-6-543-21012-3",
    "Author": 
    {
        "LName":"Roe",
        "MI": "T",
        "FName": "Richard" 
    },
    "Title": "Understanding Document Databases"
}
```

Veja a seguir um exemplo de documento de periódico com dois artigos:

```
{
    "_id" : "0123456789012",
    "Publication": "Programming Today",
    "Issue": 
    {
        "Volume": "14",
        "Number": "09"
    },
    "Articles" : [ 
        {
            "Title": "Is a Document Database Your Best Solution?",
            "Author": 
            {
                "LName": "Major",
                "FName": "Mary" 
            }
        },
        {
            "Title": "Databases for Online Solutions",
            "Author": 
            {
                "LName": "Stiles",
                "FName": "John" 
            }
        }
    ],
    "Type": "periodical"
}
```

Compare a estrutura desses dois documentos. Com um banco de dados relacional, você precisa de tabelas de "periódico" e de "livros" separadas ou de uma única tabela com campos não utilizados, como "Publicação", "Problema", "Artigos" e "MI", como valores `null`. Como os bancos de dados de documentos são semiestruturados, com cada documento definindo a própria estrutura, esses dois documentos podem coexistir no mesmo banco de dados de documentos sem campos `null`. Bancos de dados de documentos são ideais para lidar com dados esparsos.

O desenvolvimento em um banco de dados de documentos permite um desenvolvimento rápido e interativo. Isso ocorre porque você pode alterar a estrutura de dados de um documento dinamicamente, sem precisar alterar o esquema para toda a coleção. Os bancos de dados de documentos são adequados para o desenvolvimento ágil e para ambientes que mudam dinamicamente.

## Noções básicas sobre normalização em um banco de dados de documentos
<a name="document-database-normalization"></a>

Bancos de dados de documentos não são normalizados; os dados encontrados em um documento podem ser repetidos em outro documento. Além disso, algumas discrepâncias de dados podem existir entre documentos. Por exemplo, considere o cenário em que você faz uma compra em um armazenamento on-line e todos os detalhes de suas compras são armazenados em um único documento. O documento pode ser semelhante ao documento JSON a seguir:

```
{
    "DateTime": "2018-08-15T12:13:10Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "9876543210123",
            "Description" : "Understanding Document Databases",
            "Price" : "29.95"
        },
        {
            "ItemId" : "0123456789012",
            "Description" : "Programming Today",
            "Issue": {
                "Volume": "14",
                "Number": "09"
            },
            "Price" : "8.95"
        },
        {
            "ItemId": "234567890-K",
            "Description": "Gel Pen (black)",
            "Price": "2.49" 
        }
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "MasterCard",
        "Number" : "1234-5678-9012-3456" 
    },
    "ShopperId" : "1234567890" 
}
```

Todas essas informações são armazenadas como um documento em uma coleção de transações. Mais tarde, você percebe que esqueceu de comprar um item. Então, você faz logon novamente na mesma loja e faz outra compra, que também é armazenada como outro documento na coleção de transações.

```
{
    "DateTime": "2018-08-15T14:49:00Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "2109876543210",
            "Description" : "Document Databases for Fun and Profit",
            "Price" : "45.95"
        } 
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "Visa",
        "Number" : "0987-6543-2109-8765" 
    },
    "ShopperId" : "1234567890" 
}
```

Observe a redundância entre esses dois documentos seu nome e ID de comprador (e, se você usou o mesmo cartão de crédito, suas informações de cartão de crédito). Mas não tem problema, porque o armazenamento é barato e cada documento registra completamente uma única transação que pode ser recuperada rapidamente com uma consulta simples de chave/valor que não requer junções.

Existe também uma aparente discrepância entre os dois documentos as informações do seu cartão de crédito. Essa é apenas uma discrepância aparente porque é provável que você tenha usado um cartão de crédito diferente para cada compra. Cada documento é preciso em relação à transação que ele documenta.

# Trabalhar com documentos
<a name="document-database-working-with-documents"></a>

Como um banco de dados de documentos, o Amazon DocumentDB facilita o armazenamento, a consulta e a indexação de dados JSON. No Amazon DocumentDB, uma coleção de banco de dados de documentos é semelhante a uma tabela em um banco de dados relacional, exceto pelo fato de não haver um único esquema aplicado a todos os documentos. As coleções permitem agrupar documentos semelhantes, mantendo-os todos no mesmo banco de dados, sem exigir que eles tenham a estrutura idêntica.

Usando os exemplos de documentos das seções anteriores, é provável que você tenha coleções de `reading_material` e `office_supplies`. É função do software impor a que coleção um documento pertence.

Os exemplos a seguir usam a API do MongoDB para mostrar como adicionar, consultar, atualizar e excluir documentos.

**Topics**
+ [Adicionar documentos](#document-database-adding-documents)
+ [Consultar documentos](#document-database-queries)
+ [Como atualizar documentos](#document-database-updating)
+ [Como excluir documentos](#document-database-deleting)

## Adicionar documentos
<a name="document-database-adding-documents"></a>

No Amazon DocumentDB, um banco de dados é criado quando você adiciona um documento a uma coleção. Neste exemplo, você está criando uma coleção chamada `example` no banco de dados `test`, que é o banco de dados padrão quando ao conectar-se a um cluster. Como a coleção é criada implicitamente quando o primeiro documento é inserido, não há erro ao verificar o nome da coleção. Portanto, um erro de digitação no nome da coleção, como `eexample` em vez de `example`, criará e adicionará o documento à coleção `eexample` em vez de à coleção pretendida. A verificação de erros deve ser processada pela sua aplicação.

Os exemplos a seguir usam a API do MongoDB para adicionar documentos.

**Topics**
+ [Adicionar um único documento](#document-database-adding-documents-single)
+ [Adicionar diversos documentos](#document-database-adding-documents-multiple)

### Adicionar um único documento
<a name="document-database-adding-documents-single"></a>

Para adicionar um único documento a uma coleção, use a operação `insertOne( {} )` com o documento que você deseja adicionar à coleção.

```
db.example.insertOne(
    {
        "Item": "Ruler",
        "Colors": ["Red","Green","Blue","Clear","Yellow"],
        "Inventory": {
            "OnHand": 47,
            "MinOnHand": 40
        },
        "UnitPrice": 0.89
    }
)
```

A saída dessa operação é semelhante ao seguinte (formato JSON).

```
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5bedafbcf65ff161707de24f")
}
```

### Adicionar diversos documentos
<a name="document-database-adding-documents-multiple"></a>

Para adicionar diversos documentos a uma coleção, use a operação `insertMany( [{},...,{}] )` com uma lista dos documentos que você deseja adicionar à coleção. Embora os documentos nessa lista específica tenham esquemas diferentes, todos eles podem ser adicionados à mesma coleção.

```
db.example.insertMany(
    [
        {
            "Item": "Pen",
            "Colors": ["Red","Green","Blue","Black"],
            "Inventory": {
                "OnHand": 244,
                "MinOnHand": 72 
            }
        },
        {
            "Item": "Poster Paint",
            "Colors": ["Red","Green","Blue","Black","White"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50 
            }
        },
        {
            "Item": "Spray Paint",
            "Colors": ["Black","Red","Green","Blue"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50,
                "OrderQnty": 36
            }
        }    
    ]
)
```

A saída dessa operação é semelhante ao seguinte (formato JSON).

```
{
    "acknowledged" : true,
    "insertedIds" : [
            ObjectId("5bedb07941ca8d9198f5934c"),
            ObjectId("5bedb07941ca8d9198f5934d"),
            ObjectId("5bedb07941ca8d9198f5934e")
    ]
}
```

## Consultar documentos
<a name="document-database-queries"></a>

Às vezes, pode ser necessário examinar o inventário da sua loja online para que os clientes possam visualizar e comprar o que você está vendendo. Consultar uma coleção é relativamente fácil, quer você queira todos os documentos na coleção ou apenas os documentos que satisfazem a um critério específico.

Para consultar documentos, use a operação `find()`. O comando `find()` tem um único parâmetro do documento que define os critérios a serem usados na escolha dos documentos a serem retornados. A saída de `find()` é um documento formatado como uma única linha de texto sem quebras de linha. Para formatar o documento de saída para facilitar a leitura, use `find().pretty()`. Todos os exemplos deste tópico usam `.pretty()` para formatar a saída.

Use os quatro documentos inseridos na coleção `example` nos últimos dois exercícios - `insertOne()` e `insertMany()`.

**Topics**
+ [Recuperar todos os documentos em uma coleção](#document-database-queries-all-documents)
+ [Recuperar documentos que correspondem a um valor de campo](#document-database-queries-match-criteria)
+ [Recuperar documentos que correspondem a um documento incorporado](#document-database-queries-entire-embedded-document)
+ [Recuperar documentos que correspondem a um valor de campo em um documento incorporado](#document-database-queries-embeded-document-field)
+ [Recuperar documentos que correspondem a uma matriz](#document-database-queries-array-match)
+ [Recuperar documentos que correspondem a um valor em uma matriz](#document-database-queries-array-value-match)
+ [Recuperar documentos usando operadores](#document-database-query-operators)

### Recuperar todos os documentos em uma coleção
<a name="document-database-queries-all-documents"></a>

Para recuperar todos os documentos em sua coleção, use a operação `find()` com um documento de consulta vazio.

A consulta a seguir retorna todos os documentos da coleção `example`.

```
db.example.find( {} ).pretty()
```

### Recuperar documentos que correspondem a um valor de campo
<a name="document-database-queries-match-criteria"></a>

Para recuperar todos os documentos que correspondem a um campo e valor, use a operação `find()` com um documento de consulta que identifica os campos e valores a serem correspondidos.

Usando documentos anteriores, essa consulta retorna todos os documentos em que o campo "Item" será igual a "Pen".

```
db.example.find( { "Item": "Pen" } ).pretty()
```

### Recuperar documentos que correspondem a um documento incorporado
<a name="document-database-queries-entire-embedded-document"></a>

Para localizar todos os documentos que correspondem a um documento incorporado, use a operação `find()` com um documento de consulta que especifica o nome do documento incorporado e todos os campos e valores desse documento incorporado.

Ao vincular um documento incorporado, o documento incorporado do documento deve ter o mesmo nome que na consulta. Além disso, os campos e os valores no documento incorporado devem corresponder à consulta.

A consulta a seguir retorna apenas o documento "Poster Paint". Isso ocorre porque a "Caneta" tem valores diferentes para "`OnHand`" e "`MinOnHand`", e a "Tinta spray" tem um campo a mais (`OrderQnty`) que o documento de consulta.

```
db.example.find({"Inventory": {
    "OnHand": 47,
    "MinOnHand": 50 } } ).pretty()
```

### Recuperar documentos que correspondem a um valor de campo em um documento incorporado
<a name="document-database-queries-embeded-document-field"></a>

Para localizar todos os documentos que correspondem a um documento incorporado, use a operação `find()` com um documento de consulta que especifica o nome do documento incorporado e todos os campos e valores desse documento incorporado.

Considerando os documentos anteriores, a consulta a seguir usa "notação de pontos" para especificar o documento incorporado e os campos de interesse. Qualquer documento que seja correspondente será retornado, independentemente de quais outros campos possam estar presentes no documento incorporado. A consulta retorna "Poster Paint" e "Spray Paint", pois ambos correspondem aos campos e valores especificados.

```
db.example.find({"Inventory.OnHand": 47, "Inventory.MinOnHand": 50 }).pretty()
```

### Recuperar documentos que correspondem a uma matriz
<a name="document-database-queries-array-match"></a>

Para localizar todos os documentos que correspondem a uma matriz, use a operação `find()` com o nome da matriz de interesse e todos os valores na matriz. A consulta retorna todos os documentos que têm uma matriz com esse nome, com valores idênticos aos da matriz, e na mesma ordem que na consulta.

A consulta a seguir retorna apenas o documento "Pen", pois o "Poster Paint" tem uma cor adicional (White), e "Spray Paint" tem as cores em ordem diferente.

```
db.example.find( { "Colors": ["Red","Green","Blue","Black"] } ).pretty() 
```

### Recuperar documentos que correspondem a um valor em uma matriz
<a name="document-database-queries-array-value-match"></a>

Para localizar todos os documentos que possuem um valor de matriz específico, use a operação `find()` com o valor e o nome da matriz de interesse.

```
db.example.find( { "Colors": "Red" } ).pretty() 
```

A operação anterior retorna todos os três documentos, pois cada um deles tem uma matriz chamada `Colors` e o valor `Red` em algum lugar da matriz. Se você especificar o valor "`White`", a consulta retornará apenas "Tinta de cartaz".

### Recuperar documentos usando operadores
<a name="document-database-query-operators"></a>

A consulta a seguir retorna todos os documentos em que o valor "`Inventory.OnHand`" é inferior a 50.

```
db.example.find(
        { "Inventory.OnHand": { $lt: 50 } } )
```

Para obter uma lista de operadores de consulta compatíveis, consulte [Operadores de consulta e projeção](mongo-apis.md#mongo-apis-query). 

## Como atualizar documentos
<a name="document-database-updating"></a>

Normalmente, seus documentos não são estáticos e são atualizados como parte de seus fluxos de trabalho de aplicações. Os exemplos a seguir mostram algumas maneiras de como atualizar documentos.

Para atualizar um documento existente, use a operação `update()`. A operação `update()` tem dois parâmetros de documento. O primeiro documento identifica qual(is) documento(s) atualizar. O segundo documento especifica as atualizações a fazer.

Ao atualizar um campo existente - seja esse campo um campo simples, uma matriz ou um documento incorporado - você especifica o nome do campo e seus valores. No final da operação, é como se o campo no documento antigo tivesse sido substituído pelo novo campo e por novos valores.

**Topics**
+ [Atualizar os valores de um campo existente](#document-database-updating-existing-fields)
+ [Adição de um novo campo](#document-database-updating-adding-field)
+ [Substituir um documento incorporado](#document-database-replacing-embedded-document)
+ [Inserir novos campos em um documento incorporado](#document-database-updating-adding-field-embedded)
+ [Remover um campo de um documento](#document-database-remove-field)
+ [Remover um campo de vários documentos](#document-database-remove-field-all)

### Atualizar os valores de um campo existente
<a name="document-database-updating-existing-fields"></a>

Use os quatro documentos a seguir, que você adicionou anteriormente, para as seguintes operações de atualização.

```
{
    "Item": "Ruler",
    "Colors": ["Red","Green","Blue","Clear","Yellow"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 40
    },
    "UnitPrice": 0.89
},
{
    "Item": "Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
},
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Black","White"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
},
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    }
}
```

**Para atualizar um campo simples**  
Para atualizar um campo simples, use `update()` com `$set` para especificar o nome e o novo valor do campo. O exemplo a seguir altera o `Item` de "Pen" para "Gel Pen".

```
db.example.update(
    { "Item" : "Pen" },
    { $set: { "Item": "Gel Pen" } }
)
```

Os resultados dessa operação são semelhantes ao seguinte.

```
{
    "Item": "Gel Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
}
```

**Para atualizar uma matriz**  
O exemplo a seguir substitui a matriz de cores existente por uma nova matriz que inclui `Orange` e descarta `White` da lista de cores. A nova lista de cores está na ordem especificada na operação `update()`.

```
db.example.update(
    { "Item" : "Poster Paint" },
    { $set: { "Colors": ["Red","Green","Blue","Orange","Black"] } }
)
```

Os resultados dessa operação são semelhantes ao seguinte.

```
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Orange","Black"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
}
```

### Adição de um novo campo
<a name="document-database-updating-adding-field"></a>

Para modificar um documento adicionando um ou mais novos campos, use a operação `update()` com um documento de consulta que identifica o documento a ser inserido e os novos campos e valores a serem inseridos usando o operador `$set`.

O exemplo a seguir adiciona o campo `UnitPrice` com o valor `3.99` para o documento Spray Paints. Observe que o valor `3.99` é numérico, e não uma string.

```
db.example.update(
    { "Item": "Spray Paint" },
    { $set: { "UnitPrice": 3.99 } } 
)
```

Os resultados dessa operação são semelhantes ao seguinte (formato JSON).

```
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    },
    "UnitPrice": 3.99
}
```

### Substituir um documento incorporado
<a name="document-database-replacing-embedded-document"></a>

Para modificar um documento substituindo um documento incorporado, use a operação `update()` com documentos que identificam o documento incorporado e seus novos campos e valores com o uso do operador `$set`.

Considerando o seguinte documento.

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Year": 1987,
        "Month": 4,
        "Day": 18
    }
})
```

**Substituir um documento incorporado**  
O exemplo a seguir substitui o documento de data atual por um novo que tem somente os campos `Month` e `Day`. O campo `Year` foi eliminado.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date": { "Month": 4, "Day": 18 } } }
)
```

Os resultados dessa operação são semelhantes ao seguinte.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

### Inserir novos campos em um documento incorporado
<a name="document-database-updating-adding-field-embedded"></a>

**Como adicionar campos a um documento incorporado**  
Para modificar um documento adicionando um ou mais novos campos a um documento incorporado, use a operação `update()` com documentos que identificam o documento incorporado e "notação de pontos" para especificar o documento incorporado e os novos campos e valores a serem inseridos usando o operador `$set`.

Considerando o documento a seguir, o código usa a "notação de pontos" para inserir os campos `Year` e `DoW` no documento `Date` incorporado, e `Words` no documento pai.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date.Year": 1987, 
              "Date.DoW": "Saturday",
              "Words": 2482 } }
)
```

Os resultados dessa operação são semelhantes ao seguinte.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
}
```

### Remover um campo de um documento
<a name="document-database-remove-field"></a>

Para modificar um documento removendo um campo do documento, use a operação `update()` com um documento de consulta que identifica o campo a ser removido do documento e o operador `$unset` para especificar o campo a ser removido.

O exemplo a seguir remove o campo `Words` do documento anterior.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

Os resultados dessa operação são semelhantes ao seguinte.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

### Remover um campo de vários documentos
<a name="document-database-remove-field-all"></a>

Para modificar um documento removendo um campo de vários documentos, use a operação `update()` com o operador `$unset` e a opção `multi` definida como `true`.

O exemplo a seguir remove o campo `Inventory` de todos os documentos na coleção de exemplo. Se um documento não tiver o campo `Inventory`, nenhuma ação será executada nesse documento. Se `multi: true` for omitido, a ação será executada apenas no primeiro documento que atenda ao critério.

```
db.example.update(
    {},
    { $unset: { Inventory:1 } },
    { multi: true }
)
```

## Como excluir documentos
<a name="document-database-deleting"></a>

Para remover um documento do banco de dados, use a operação `remove()`, especificando qual documento remover. O código a seguir remove "Gel Pen" da sua coleção `example`.

```
db.example.remove( { "Item": "Gel Pen" } )
```

Para remover todos os documentos do seu banco de dados, use a operação `remove()` com uma consulta vazia.

```
db.example.remove( { } )
```