

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Qué es Amazon DocumentDB (compatible con MongoDB)
<a name="what-is"></a>

Amazon DocumentDB (compatible con MongoDB) es un servicio rápido, de confianza y completamente administrado. Amazon DocumentDB simplifica la configuración, la administración y el escalado de bases de datos compatibles con MongoDB en la nube. Con Amazon DocumentDB, puede ejecutar el mismo código de aplicación y utilizar los mismos controladores y herramientas que utiliza con MongoDB.

Antes de utilizar Amazon DocumentDB, debe revisar los conceptos y las características que se describen en [Cómo funcionan](how-it-works.md). A continuación, realice los pasos que se indican en [Guía de introducción](get-started-guide.md).

**Topics**
+ [Descripción general de](#overview)
+ [Clústeres](#what-is-db-clusters)
+ [instancias](#what-is-db-instances)
+ [Regiones y AZs](#what-is-regions-and-azs)
+ [Precios](#docdb-pricing)
+ [Supervisión](#what-is-monitoring)
+ [Interfaces](#what-is-interfaces)
+ [Siguientes pasos](#what-is-next)
+ [Cómo funcionan](how-it-works.md)
+ [¿Qué es una base de datos de documentos?](what-is-document-db.md)

## Información general de Amazon DocumentDB
<a name="overview"></a>

A continuación, se muestran algunas de las características generales de Amazon DocumentDB:
+ Amazon DocumentDB admite dos tipos de clústeres: clústeres basados en instancias y clústeres elásticos. Los clústeres elásticos admiten cargas de trabajo con una capacidad de reads/writes almacenamiento de millones por segundo y petabytes. Para obtener más información acerca de los clústeres elásticos, consulte [Uso de Amazon DocumentDB Elastic Clusters](docdb-using-elastic-clusters.md). El siguiente contenido hace referencia a los clústeres basados en instancias de Amazon DocumentDB.
+ Amazon DocumentDB aumenta automáticamente el tamaño del volumen de almacenamiento a medida que aumentan las necesidades de almacenamiento de la base de datos. El volumen de almacenamiento aumenta en incrementos de 10 GB, hasta un máximo de 128 TiB. No necesita aprovisionar almacenamiento excesivo para el clúster a fin de afrontar el crecimiento en el futuro.
+ Con Amazon DocumentDB, puede aumentar el rendimiento de lectura para admitir solicitudes de aplicaciones de gran volumen mediante la creación de hasta 15 instancias de réplica. Las réplicas de Amazon DocumentDB comparten el mismo almacenamiento subyacente, lo que reduce los costos y evita la necesidad de realizar escrituras en los nodos de réplica. Esta capacidad libera más potencia de procesamiento para atender las solicitudes de lectura y reduce el tiempo de retraso de la réplica, que a menudo se reduce a milisegundos de un solo dígito. Puede añadir réplicas en cuestión de minutos, independientemente del tamaño del volumen de almacenamiento. Amazon DocumentDB también proporciona un punto de conexión de lectura para que la aplicación pueda conectarse sin tener que realizar un seguimiento de las réplicas a medida que se añaden o quitan.
+ Amazon DocumentDB le permite escalar los recursos informáticos y memoria para cada una de las instancias. Las operaciones de escalado de los recursos informáticos normalmente se llevan a cabo en cuestión de minutos.
+ Amazon DocumentDB se ejecuta en Amazon Virtual Private Cloud (Amazon VPC), de modo que puede aislar su base de datos en su propia red virtual. También puede configurar ajustes del firewall para controlar el acceso de red al clúster.
+ Amazon DocumentDB monitoriza continuamente el estado del clúster. Si se produce un error en una instancia, Amazon DocumentDB reinicia automáticamente la instancia y los procesos asociados. Amazon DocumentDB no requiere una reproducción de los reregistros de la base de datos durante la recuperación tras un bloqueo, lo que reduce considerablemente los tiempos de reinicio. Amazon DocumentDB también aísla la caché de la base de datos del proceso de la base de datos, lo que permite que la caché sobreviva a un reinicio de la instancia.
+ Cuando ocurre un error en una instancia, Amazon DocumentDB automatiza la conmutación por error en una de las 15 réplicas de Amazon DocumentDB que crea en otras zonas de disponibilidad. Si no se han aprovisionado réplicas y se produce un error, Amazon DocumentDB intenta crear una nueva instancia de Amazon DocumentDB de forma automática.
+ La capacidad de copia de seguridad de Amazon DocumentDB permite point-in-time la recuperación del clúster. Esta característica le permite restaurar el clúster a cualquier segundo dentro de su período de retención, hasta los últimos 5 minutos. Puede configurar el período de retención de copia de seguridad automático hasta un máximo de 35 días. Las copias de seguridad automatizadas se almacenan en Amazon Simple Storage Service (Amazon S3), diseñado para una durabilidad del 99,999999999 %. Las copias de seguridad de Amazon DocumentDB son automáticas, incrementales y continuas, y no afectan al rendimiento del clúster.
+ Con Amazon DocumentDB, puede cifrar sus bases de datos mediante claves que cree y controle mediante AWS Key Management Service ().AWS KMS En un clúster de base de datos que se ejecute con el cifrado de Amazon DocumentDB, los datos almacenados en reposo en el almacenamiento subyacente están cifrados. Las copias de seguridad automatizadas, las instantáneas y las réplicas que se encuentran en el mismo clúster también están cifradas.
+ Amazon DocumentDB está autorizada por el Programa federal de administración de riesgos y autorizaciones (FedRAMP). Cuenta con una autorización alta de FedRAMP AWS GovCloud para las regiones (EE. UU.) y una autorización moderada de FedRAMP para las regiones de EE. UU. AWS East/West Para obtener información detallada AWS y sobre las iniciativas de cumplimiento, consulte los [AWS servicios incluidos en el ámbito](https://aws.amazon.com/compliance/services-in-scope/FedRAMP/) de aplicación por programa de cumplimiento.

Si es la primera vez que utiliza AWS los servicios, utilice los siguientes recursos para obtener más información:
+ AWS ofrece servicios de informática, bases de datos, almacenamiento, análisis y otras funciones. Para obtener una descripción general de todos los AWS servicios, consulte [Computación en la nube con Amazon Web Services](https://aws.amazon.com/what-is-aws/).
+ AWS proporciona varios servicios de bases de datos. Para averiguar cuál es el mejor servicio para su entorno, consulte [Bases de datos en AWS](https://aws.amazon.com/products/databases/).

## Clústeres
<a name="what-is-db-clusters"></a>

Un *clúster* contiene entre 0 y 16 instancias y un volumen de almacenamiento del clúster que administra los datos de esas instancias. Todos los procesos de escritura se efectúan a través de la instancia principal. Todas las instancias (principales y réplicas) admiten operaciones de lectura. Los datos del clúster se almacenan en el volumen del clúster con copias en tres zonas de disponibilidad diferentes.

![\[Clúster de Amazon DocumentDB que contiene la instancia principal en la zona de disponibilidad 1, que escribe en el volumen del clúster para las réplicas de las zonas 2 y 3.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/how-it-works-01c.png)


Los clústeres basados en instancias de Amazon DocumentDB 5.0 admiten dos configuraciones de almacenamiento para un clúster de base de datos: Amazon DocumentDB estándar y Amazon DocumentDB optimizado para E/S. Para obtener más información, consulte [Configuraciones de almacenamiento en clústeres de Amazon DocumentDB](db-cluster-storage-configs.md).

## instancias
<a name="what-is-db-instances"></a>

Una instancia de Amazon DocumentDB es un entorno de base de datos aislado en la nube. Una instancia puede contener varias bases de datos creadas por el usuario. Puede crear y modificar una instancia mediante el Consola de administración de AWS o el AWS CLI.

La capacidad de computación y de memoria de una instancia se determina mediante su *clase de instancia*. Puede seleccionar la instancia que mejor se adapte a sus necesidades. Si sus necesidades cambian con el tiempo, puede elegir otra clase de instancia. Para ver las especificaciones de las clases de instancias, consulte [Especificaciones de clases de instancias](db-instance-classes.md#db-instance-class-specs).

Las instancias de Amazon DocumentDB se ejecutan únicamente en el entorno de Amazon VPC. Amazon VPC le permite controlar su entorno de red virtual: puede elegir su propio rango de direcciones IP, crear subredes y configurar listas de enrutamiento y control de acceso (). ACLs

Antes de crear instancias de Amazon DocumentDB, debe crear un clúster que contenga las instancias.

Todas las clases de instancias no se admiten en todas las regiones. En la tabla siguiente, se muestran las clases de instancias que admite cada región.

**nota**  
Para ver una lista completa de tipos de instancias compatibles con Amazon DocumentDB en cada clase de instancias, consulte [Especificaciones de clases de instancias](db-instance-classes.md#db-instance-class-specs).


**Clases de instancias admitidas por región**  

|  | Clases de instancia | Region | R8G | R6GD | R6G | R5 | R4 | T4G | T3 | Sin servidor | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Este de EE. UU. (Ohio) | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado |  compatible | 
| Este de EE. UU. (Norte de Virginia) | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado |  compatible | 
| Oeste de EE. UU. (Oregón) | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado |  compatible | 
| África (Ciudad del Cabo) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| América del Sur (São Paulo) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Hong Kong) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Hyderabad) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Malasia) |  |  | Soportado |  |  | Soportado |  compatible |  | 
| Asia-Pacífico (Mumbai) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Osaka) |  | Soportado | Soportado | Soportado |  | Soportado |  compatible |  | 
| Asia-Pacífico (Seúl) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Sídney) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Yakarta) | Soportado | Soportado | Soportado | Soportado |  | Soportado |  compatible |  | 
| Asia-Pacífico (Melbourne) |  |  | Soportado | Soportado |  | Soportado |  compatible |  | 
| Asia-Pacífico (Singapur) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Asia-Pacífico (Tailandia) |  |  | Soportado |  |  | Soportado |  compatible |  | 
| Asia-Pacífico (Tokio) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Canadá (centro) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (Fráncfort) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (Zúrich) |  | Soportado | Soportado | Soportado |  | Soportado |  compatible |  | 
| Europa (Irlanda) | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado | Soportado |  compatible | 
| Europa (Londres) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (Milán) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (París) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (España) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Europa (Estocolmo) | Soportado | Soportado | Soportado | Soportado |  | Soportado |  compatible |  | 
| México (centro) |  |  | Soportado |  |  | Soportado |  compatible |  | 
| Medio Oriente (EAU) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| China (Pekín) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| China (Ningxia) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| Israel (Tel Aviv) |  |  | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| AWS GovCloud (EE. UU. al oeste) | Soportado | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 
| AWS GovCloud (EEUU-Este) |  | Soportado | Soportado | Soportado |  | Soportado | Soportado |  compatible | 

## Regiones y zonas de disponibilidad
<a name="what-is-regions-and-azs"></a>

Las regiones y las zonas de disponibilidad definen las ubicaciones físicas del clúster y de las instancias.

### Regions
<a name="what-is-regions"></a>

AWS Los recursos de computación en la nube se encuentran en instalaciones de centros de datos de alta disponibilidad en diferentes áreas del mundo (por ejemplo, América del Norte, Europa o Asia). Cada ubicación de centro de datos se denomina *región*.

Cada AWS región está diseñada para estar completamente aislada de las demás AWS regiones. Dentro de cada una de ellas hay varias zonas de disponibilidad. Al lanzar los nodos en zonas de disponibilidad diferentes, puede lograr la máxima tolerancia a errores. El siguiente diagrama muestra una vista general del funcionamiento de AWS las regiones y las zonas de disponibilidad.

![\[Vista de alto nivel de AWS regiones y zonas de disponibilidad en Amazon DocumentDB.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/docdb-regions-and-azs.png)


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

Cada AWS región contiene varias ubicaciones distintas denominadas *zonas de disponibilidad.* Cada zona de disponibilidad está diseñada para estar aislada de los errores que se produzcan en otras zonas de disponibilidad y para proporcionar conectividad de red de baja latencia económica con otras zonas de disponibilidad de la misma región. Al lanzar instancias para un clúster determinado en varias zonas de disponibilidad, puede proteger las aplicaciones en el caso improbable de que se produzca un error en una zona de disponibilidad.

La arquitectura de Amazon DocumentDB separa el almacenamiento y la computación. Para la capa de almacenamiento, Amazon DocumentDB replica seis copias de los datos en tres AWS zonas de disponibilidad. Por ejemplo, si lanza un clúster de Amazon DocumentDB en una región que solo admite dos zonas de disponibilidad, el almacenamiento de datos se replicará de seis maneras en tres zonas de disponibilidad, pero las instancias de computación solo estarán disponibles en dos zonas de disponibilidad.

 En la siguiente tabla, se indica el número de zonas de disponibilidad que puede utilizar en una determinada zona Región de AWS para aprovisionar instancias informáticas para su clúster.


| Nombre de la región | Region | Zonas de disponibilidad (cálculo) | 
| --- | --- | --- | 
| Este de EE. UU. (Ohio) | `us-east-2` | 3 | 
| Este de EE. UU. (Norte de Virginia) | `us-east-1` | 6 | 
| Oeste de EE. UU. (Oregón) | `us-west-2` | 4 | 
| África (Ciudad del Cabo) | `af-south-1` | 3 | 
| América del Sur (São Paulo) | `sa-east-1` | 3 | 
| Asia-Pacífico (Hong Kong) | `ap-east-1` | 3 | 
| Asia-Pacífico (Hyderabad) | `ap-south-2` | 3 | 
| Asia-Pacífico (Malasia) | `ap-southeast-5` | 3 | 
| Asia-Pacífico (Mumbai) | `ap-south-1` | 3 | 
| Asia-Pacífico (Osaka) | `ap-northeast-3` | 3 | 
| Asia-Pacífico (Seúl) | `ap-northeast-2` | 4 | 
| Asia-Pacífico (Singapur) | `ap-southeast-1` | 3 | 
| Asia-Pacífico (Sídney) | `ap-southeast-2` | 3 | 
| Asia-Pacífico (Yakarta) | `ap-southeast-3` | 3 | 
| Asia-Pacífico (Melbourne) | `ap-southeast-4` | 3 | 
| Asia-Pacífico (Tailandia) | `ap-southeast-7` | 3 | 
| Asia-Pacífico (Tokio) | `ap-northeast-1` | 3 | 
| Canadá (centro) | `ca-central-1` | 3 | 
| Región China (Pekín) | `cn-north-1` | 3 | 
| China (Ningxia) | `cn-northwest-1` | 3 | 
| Europa (Fráncfort) | `eu-central-1` | 3 | 
| Europa (Zúrich) | `eu-central-2` | 3 | 
| Europa (Irlanda) | `eu-west-1` | 3 | 
| Europa (Londres) | `eu-west-2` | 3 | 
| Europa (Milán) | `eu-south-1` | 3 | 
| Europa (París) | `eu-west-3` | 3 | 
| Europa (España) | `eu-south-2` | 3 | 
| Europa (Estocolmo) | `eu-north-1` | 3 | 
| México (centro) | `mx-central-1` | 3 | 
| Medio Oriente (EAU) | `me-central-1` | 3 | 
| Israel (Tel Aviv) | `il-central-1` | 3 | 
| AWS GovCloud (EE. UU. al oeste) | `us-gov-west-1` | 3 | 
| AWS GovCloud (EEUU-Este) | `us-gov-east-1` | 3 | 

## Precios de Amazon DocumentDB
<a name="docdb-pricing"></a>

Los clústeres de Amazon DocumentDB se facturan en función de los siguientes componentes: 
+ **Horas de instancia (por hora)**: en función de la clase de instancia (por ejemplo,`db.r5.xlarge`). Los precios se muestran por hora, pero las facturas se ajustan hasta el segundo y muestran las horas en formato decimal. El uso de Amazon DocumentDB se factura por incrementos de un segundo, con un mínimo de 10 minutos. Para obtener más información, consulte [Administración de clases de instancias](db-instance-classes.md). 
+ **Solicitudes de E/S (por cada millón de solicitudes al mes)**: número total de I/O solicitudes de almacenamiento que realiza en un ciclo de facturación.
+ **Almacenamiento de copias de seguridad (por GiB al mes)**: el almacenamiento de copias de seguridad es el almacenamiento asociado a copias de seguridad de base de datos automatizadas que haya realizado. Aumentar el período de retención de copia de seguridad u obtener instantáneas de base de datos adicionales aumenta el almacenamiento de copias de seguridad consumido por su base de datos. El almacenamiento de copias de seguridad se mide en GB-meses y no se aplica la tarificación por segundos. Para obtener más información, consulte [Copia de seguridad y restauración en Amazon DocumentDB](backup_restore.md). 
+ **Transferencia de datos (por GB)**: transferencia de datos de entrada y salida de la instancia desde o hacia Internet u otras AWS regiones.

Para obtener información detallada, consulte los precios de [Amazon DocumentDB.](https://aws.amazon.com/documentdb/pricing/)

### Prueba gratuita
<a name="free-trial"></a>

Puede probar Amazon DocumentDB de forma gratuita con la versión de prueba gratuita de 1 mes. Para obtener más información, consulte los [precios de la prueba gratuita en Amazon DocumentDB](https://aws.amazon.com/documentdb/pricing/) o consulte las preguntas frecuentes sobre la prueba gratuita de [Amazon DocumentDB.](https://aws.amazon.com/documentdb/free-trial/)

## Supervisión
<a name="what-is-monitoring"></a>

Hay varias formas de hacer un seguimiento del rendimiento y el estado de una instancia. Puedes usar el CloudWatch servicio gratuito de Amazon para supervisar el rendimiento y el estado de una instancia. Puede encontrar gráficos de rendimiento en la consola de Amazon DocumentDB. Puede suscribirse a eventos de Amazon DocumentDB si desea recibir una notificación cuando se produzcan cambios en una instancia, una instantánea, un grupo de parámetros o un grupo de seguridad.

Para obtener más información, consulte los siguientes temas:
+ [Supervisión de Amazon DocumentDB con CloudWatch](cloud_watch.md)
+ [Registro de llamadas a la API de Amazon DocumentDB con AWS CloudTrail](logging-with-cloudtrail.md)

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

Existen varias formas de interactuar con Amazon DocumentDB, incluidas la Consola de administración de AWS y la. AWS CLI

### Consola de administración de AWS
<a name="what-is-console"></a>

 Consola de administración de AWS Se trata de una sencilla interfaz de usuario basada en la web. Desde la consola puede administrar sus clústeres e instancias sin necesidad de programación. [Para acceder a la consola de Amazon DocumentDB, inicie sesión en Consola de administración de AWS y abra la consola de Amazon DocumentDB en /docdb. https://console.aws.amazon.com](https://console.aws.amazon.com/docdb) 

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

Puede usar AWS Command Line Interface (AWS CLI) para administrar sus instancias y clústeres de Amazon DocumentDB. Con una configuración mínima, puede comenzar a utilizar toda la funcionalidad que ofrece la consola de Amazon DocumentDB con el programa de terminal que desee.
+ Para instalar el AWS CLI, consulte [Instalación de la interfaz de línea de AWS comandos](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).
+ Para empezar a utilizar Amazon DocumentDB, consulte la AWS CLI [referencia de la interfaz de línea de AWS comandos de Amazon DocumentDB.](https://docs.aws.amazon.com/cli/latest/reference/docdb/index.html)

### Controladores de MongoDB
<a name="what-is-mongodb-drivers"></a>

Para desarrollar y escribir aplicaciones en un clúster de Amazon DocumentDB, también puede utilizar los controladores de MongoDB con Amazon DocumentDB. Para obtener más información, consulte la pestaña del intérprete de comandos de MongoDB en [Conexión con TLS habilitado](connect_programmatically.md#connect_programmatically-tls_enabled) o [Conexión con TLS deshabilitado](connect_programmatically.md#connect_programmatically-tls_disabled).

## Siguientes pasos
<a name="what-is-next"></a>

En la sección anterior se han presentado los componentes de la infraestructura básica ofrecidos por Amazon DocumentDB. ¿Qué debería hacer a continuación? Dependiendo de sus circunstancias, consulte uno de los siguientes temas para empezar.
+ Comience a utilizar Amazon DocumentDB creando un clúster y una instancia mediante. CloudFormation [Inicio rápido de Amazon DocumentDB con CloudFormation](quick_start_cfn.md)
+ Empiece a trabajar con Amazon DocumentDB creando un clúster y una instancia con las instrucciones que se proporcionan en nuestro [Guía de introducción](get-started-guide.md).
+ Comience a utilizar Amazon DocumentDB creando un clúster elástico siguiendo las instrucciones que se indican en [Introducción a los clústeres elásticos de Amazon DocumentDB](elastic-get-started.md).
+ Migre su implementación de MongoDB a Amazon DocumentDB utilizando las instrucciones en [Migración a Amazon DocumentDB](docdb-migration.md)

# Funcionamiento de Amazon DocumentDB
<a name="how-it-works"></a>

Amazon DocumentDB (compatible con MongoDB) es un servicio de base de datos completamente administrado y compatible con MongoDB. Con Amazon DocumentDB, puede ejecutar el mismo código de aplicación y utilizar los mismos controladores y herramientas que utiliza con MongoDB. Amazon DocumentDB es compatible con MongoDB 3.6, 4.0, 5.0 y 8.0.

**Topics**
+ [Puntos de conexión de Amazon DocumentDB](#how-it-works.endpoints)
+ [Compatibilidad con TLS](#how-it-works.ssl)
+ [Almacenamiento de Amazon DocumentDB](#how-it-works.storage)
+ [Replicación de Amazon DocumentDB](#how-it-works.replication)
+ [Fiabilidad de Amazon DocumentDB](#how-it-works.reliability)
+ [Opciones de preferencia de lectura](#durability-consistency-isolation)
+ [Eliminaciones de TTL](#how-it-works.ttl-deletes)
+ [Recursos facturables](#billing)

Cuando utilice Amazon DocumentDB, empezará creando un *clúster*. Un clúster se compone de cero o varias instancias y de un volumen de clúster que administra los datos de esas instancias. Un *volumen de clúster* de Amazon DocumentDB es un volumen de almacenamiento de base de datos virtual que abarca varias zonas de disponibilidad. Cada zona de disponibilidad tiene una copia de los datos del clúster.

Los clústeres de Amazon DocumentDB constan de dos componentes principales:
+ **Volumen de clúster**: utiliza un servicio de almacenamiento nativo en la nube para replicar los datos de seis maneras en tres zonas de disponibilidad, lo que proporciona un almacenamiento disponible y duradero. Un clúster de Amazon DocumentDB tiene exactamente un volumen de clúster, que puede almacenar hasta 128 TiB de datos.
+ **Instancias**: proporcionan la potencia de procesamiento de la base de datos al escribir y leer datos desde el volumen de almacenamiento del clúster. Un clúster de Amazon DocumentDB puede tener de 0 a 16 instancias. 

Las instancias adoptan uno de estos dos roles:
+ **Instancia de base de datos principal**: admite operaciones de lectura y escritura y realiza todas las modificaciones de los datos en el volumen de clúster. Cada clúster de Amazon DocumentDB tiene una instancia principal.
+ **Instancia de réplica**: solo admite operaciones de lectura. Un clúster de Amazon DocumentDB puede tener hasta 15 réplicas, además de la instancia principal. El hecho de disponer de varias réplicas le permite distribuir las cargas de trabajo de lectura. Además, al colocar las réplicas en distintas zonas de disponibilidad, también puede aumentar la disponibilidad del clúster.

En el siguiente diagrama se ilustra la relación entre el volumen de clúster, la instancia principal y las réplicas de un clúster de Amazon DocumentDB:

![\[Puntos de conexión de Amazon DocumentDB, incluidos los puntos de conexión de clúster, lector e instancia.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/docdb-endpoint-types.png)


Las instancias del clúster no tienen por qué ser de la misma clase, y se pueden aprovisionar y terminar según sea necesario. Esta arquitectura le permite escalar la capacidad de cómputo de su clúster de forma independiente de su almacenamiento.

Cuando la aplicación escribe datos en la instancia principal, la instancia principal ejecuta una operación de escritura duradera en el volumen del clúster. A continuación, replica el estado de esa escritura (no los datos) en cada réplica activa. Las réplicas de Amazon DocumentDB no participan en el procesamiento de escrituras y, por lo tanto, las réplicas de Amazon DocumentDB son ventajosas para el escalado de lectura. Las lecturas de réplicas de Amazon DocumentDB son, en última instancia, consistentes con un retardo de réplica mínimo, normalmente menos de 100 milisegundos una vez que la instancia principal escribe los datos. Se garantiza que las operaciones de lectura de las réplicas se realizan en el orden en que fueron escritas en la instancia principal. El retardo de la réplica varía en función de la frecuencia de cambio de datos, y los periodos con mucha actividad de escritura pueden aumentar el retardo de la réplica. Para obtener más información, consulte las métricas `ReplicationLag` en [Métricas de Amazon DocumentDB](cloud_watch.md#cloud_watch-metrics_list). 

## Puntos de conexión de Amazon DocumentDB
<a name="how-it-works.endpoints"></a>

Amazon DocumentDB ofrece varias opciones de conexión para proporcionar una amplia variedad de casos de uso. Para conectarse a una instancia de un clúster de Amazon DocumentDB, debe especificar el punto de conexión de la instancia. Un *punto de conexión* es una dirección y un número de puerto de host, separados por dos puntos.

Le recomendamos que se conecte al clúster mediante el punto de conexión de clúster y en el modo de conjunto de réplicas (consulte [Conexión a Amazon DocumentDB como conjunto de réplicas](connect-to-replica-set.md)), a no ser que tenga un caso de uso específico para conectarse al punto de conexión del lector o a un punto de conexión de instancia. Para dirigir solicitudes a las réplicas, elija una configuración de preferencia de lectura de controlador que maximice el escalado de lectura mientras cumple con los requisitos de coherencia de lectura de su aplicación. Las preferencias de lectura `secondaryPreferred` permiten las lecturas de réplica y libera la instancia principal para hacer más trabajo.

Los siguientes puntos de conexión están disponibles en un clúster de Amazon DocumentDB.

### Punto de conexión de clúster
<a name="how-it-works.endpoints.cluster"></a>

El *punto de conexión del clúster* le conecta a la instancia principal del clúster. El punto de conexión del clúster se puede utilizar para operaciones de lectura y escritura. Un clúster de Amazon DocumentDB tiene exactamente un punto de conexión de clúster.

El punto de conexión del clúster proporciona conmutación por error para conexiones de lectura y escritura con el clúster. Si la instancia principal actual del clúster produce un error y el clúster tiene al menos una réplica de lectura activa, el punto de conexión del clúster redirige automáticamente las solicitudes de conexión a una nueva instancia principal. Cuando se conecte al clúster de Amazon DocumentDB, le recomendamos que se conecte al clúster mediante el punto de conexión de clúster y en el modo de conjunto de réplicas (consulte [Conexión a Amazon DocumentDB como conjunto de réplicas](connect-to-replica-set.md)).

A continuación, se muestra un punto de conexión de un clúster de Amazon DocumentDB de ejemplo:

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

A continuación, se muestra una cadena de conexión de ejemplo que usa este punto de conexión de clúster:

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

Para obtener información acerca de cómo encontrar los puntos de conexión de un clúster, consulte [Búsqueda de puntos de conexión de un clúster](db-cluster-endpoints-find.md).

### Punto de conexión del lector
<a name="how-it-works.endpoints.reader"></a>

El *punto de conexión del lector* balancea la carga de las conexiones de solo lectura entre todas las réplicas disponibles del clúster. Un punto de conexión de lector de clúster funcionará como punto de conexión del clúster si se conecta a través del modo `replicaSet`, es decir, en la cadena de conexión, el parámetro del conjunto de réplicas es `&replicaSet=rs0`. En este caso, podrá llevar a cabo operaciones de escritura en el principal. Sin embargo, si se conecta al clúster que especifica `directConnection=true` y se intenta llevar a cabo una operación de escritura a través de una conexión con el punto de conexión de lector, se produce un error. Un clúster de Amazon DocumentDB tiene exactamente un punto de conexión de lector.

Si el clúster contiene solo una instancia principal, el punto de conexión del lector se conecta a la instancia principal. Cuando se añade una instancia de réplica al clúster de Amazon DocumentDB, el punto de conexión del lector abre las conexiones de solo lectura con la nueva réplica una vez que esté activo.

A continuación, se muestra un punto de conexión del lector de ejemplo de un clúster de Amazon DocumentDB:

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

A continuación, se muestra una cadena de conexión de ejemplo que usa un punto de conexión de lector:

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

El punto de conexión del lector balancea la carga de las conexiones de solo lectura, no de las solicitudes de lectura. Si algunas de las conexiones del punto de conexión del lector se utilizan más que otras, es posible que las solicitudes de lectura no se puedan equilibrar uniformemente entre las instancias del clúster. Se recomienda distribuir solicitudes mediante la conexión al punto de conexión de clúster como un conjunto de réplicas y mediante la opción de preferencia de lectura secondaryPreferred. 

Para obtener información acerca de cómo encontrar los puntos de conexión de un clúster, consulte [Búsqueda de puntos de conexión de un clúster](db-cluster-endpoints-find.md).

### Punto de conexión de instancia
<a name="how-it-works.endpoints.instance"></a>

Un *punto de conexión de una instancia* se conecta a una instancia específica del clúster. El punto de conexión de instancia de la instancia principal actual se puede utilizar para realizar operaciones de lectura y escritura. Sin embargo, si se intentan realizar operaciones de escritura en un punto de conexión de instancia de una réplica de lectura, se produce un error. Un clúster de Amazon DocumentDB tiene un punto de conexión de instancia para cada instancia activa.

Un punto de conexión de instancia proporciona un control directo sobre las conexiones con una instancia específica en los casos en los que el uso del punto de conexión del clúster o del lector puede no ser adecuado. Un ejemplo de caso de uso es el aprovisionamiento de una carga de trabajo de análisis diarios de solo lectura. Puede aprovisionar una instancia de larger-than-normal réplica, conectarse directamente a la nueva instancia más grande con su punto de enlace de instancia, ejecutar las consultas de análisis y, a continuación, cerrar la instancia. El uso del punto de conexión de instancia impide que el tráfico de los análisis afecte a otras instancias del clúster.

A continuación, se muestra un punto de conexión de instancia de ejemplo para una sola instancia de un clúster de Amazon DocumentDB:

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

A continuación, se muestra una cadena de conexión de ejemplo que usa este punto de conexión de instancia:

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

**nota**  
El rol de instancia principal o réplica de una instancia puede cambiar debido a un evento de conmutación por error. Las aplicaciones no deben presuponer en ningún momento que un determinado punto de conexión de instancia es la instancia principal. No se recomienda conectarse a puntos de conexión de instancia para aplicaciones de producción. En su lugar, se recomienda que se conecte al clúster mediante el punto de conexión de clúster y en el modo de conjunto de réplicas (consulte [Conexión a Amazon DocumentDB como conjunto de réplicas](connect-to-replica-set.md)). Para obtener información sobre el control avanzado de la prioridad de conmutación por error de las instancias, consulte [Información general de la tolerancia a errores de clúster de Amazon DocumentDB](db-cluster-fault-tolerance.md). 

Para obtener información acerca de cómo encontrar los puntos de conexión de un clúster, consulte [Búsqueda del punto de conexión de una instancia](db-instance-endpoint-find.md).

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

Puede conectarse al punto de conexión de su clúster de Amazon DocumentDB en modo de conjunto de réplicas especificando el nombre del conjunto de réplicas `rs0`. La conexión en el modo de conjunto de réplicas proporciona la capacidad de especificar las opciones Read Concern, Write Concern y Read Preference. Para obtener más información, consulte [Coherencia de lectura](#durability-consistency-isolation.read-consistency).

A continuación, se muestra una cadena de conexión de ejemplo que se conecta en el modo de conjunto de réplicas:

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

Cuando se conecta en modo de conjunto de réplicas, el clúster de Amazon DocumentDB se muestra ante los controladores y clientes como un conjunto de réplicas. Las instancias añadidas y eliminadas del clúster de Amazon DocumentDB se reflejan automáticamente en la configuración del conjunto de réplicas.

Cada clúster de Amazon DocumentDB consta de un único conjunto de réplicas con el nombre predeterminado `rs0`. El nombre del conjunto de réplicas no se puede modificar.

La conexión al punto de conexión del clúster en el modo de conjunto de réplicas es el método recomendado para uso general.

**nota**  
Todas las instancias de un clúster de Amazon DocumentDB atienden las conexiones en el mismo puerto TCP.

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

Para obtener más información sobre cómo conectarse a Amazon DocumentDB mediante seguridad de la capa de transporte (TLS), consulte [Cifrado de datos en tránsito](security.encryption.ssl.md).

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

Los datos de Amazon DocumentDB se almacenan en un *volumen de clúster*, que es un volumen virtual único que utiliza unidades de estado sólido ()SSDs. Un volumen de clúster se compone de seis copias de los datos, que se replican automáticamente en varias zonas de disponibilidad de una sola Región de AWS. Esta replicación ayuda a garantizar que los datos se conserven durante mucho tiempo, con menos riesgo de que se pierdan los datos. También ayuda a garantizar que el clúster esté más disponible durante una conmutación por error, porque ya existen copias de sus datos en otras zonas de disponibilidad. Estas copias pueden seguir enviando solicitudes de datos a las instancias del clúster de Amazon DocumentDB. 

### Cómo se factura el almacenamiento de datos de
<a name="how-it-works-storage-billing"></a>

Amazon DocumentDB aumenta automáticamente el tamaño del volumen del clúster cuando aumenta la cantidad de datos. Un volumen de clúster de Amazon DocumentDB puede crecer hasta un tamaño máximo de 128 TiB; sin embargo, solo se le cobrará por el espacio que utilice en un volumen de clúster de Amazon DocumentDB. A partir de Amazon DocumentDB 4.0, cuando se eliminan datos, por ejemplo, al eliminar una colección o un índice, el espacio asignado general disminuye en una cantidad comparable. Por lo tanto, puede reducir los cargos de almacenamiento eliminando tablas, índices y bases de datos que ya no necesite. En la versión 3.6 de Amazon DocumentDB, el volumen del clúster puede reutilizar el espacio liberado al eliminar datos, pero el volumen en sí nunca disminuye de tamaño. Como resultado, en la versión 3.6, es posible que no vea ningún cambio en el almacenamiento cuando elimine una colección o un índice, aunque el espacio liberado se vuelva a utilizar. 

**nota**  
Con Amazon DocumentDB 3.6, los costos de almacenamiento se basan en el “límite máximo” de almacenamiento (la cantidad máxima que se asignó al clúster de Amazon DocumentDB en cualquier momento). Puede administrar los costos evitando las prácticas de ETL que crean grandes volúmenes de información temporal o que cargan grandes volúmenes de datos nuevos antes de eliminar datos antiguos innecesarios. Si la eliminación de datos de un clúster de Amazon DocumentDB produce una cantidad sustancial de espacio asignado pero que no se utiliza, el restablecimiento del nivel máximo de crecimiento exige realizar el volcado de datos lógicos y restablecerlo a un clúster nuevo, con una herramienta como `mongodump` o `mongorestore`. La creación y restauración de una instantánea no reduce el almacenamiento asignado debido a que la distribución física del almacenamiento subyacente no se verá modificada en la instantánea restaurada.

**nota**  
El uso de `mongodump` utilidades `mongorestore` como esta I/O conlleva gastos en función del tamaño de los datos que se leen y escriben en el volumen de almacenamiento.

[Para obtener información sobre el almacenamiento de datos y los precios de Amazon DocumentDB, consulte I/O precios y precios de [Amazon DocumentDB (compatible con MongoDB](https://aws.amazon.com/documentdb/pricing)). FAQs](https://aws.amazon.com/documentdb/faqs/#Pricing)

## Replicación de Amazon DocumentDB
<a name="how-it-works.replication"></a>

En un clúster de Amazon DocumentDB, cada instancia de réplica expone un punto de conexión independiente. Los puntos de conexión de estas réplicas proporcionan acceso de solo lectura a los datos del volumen de clúster. Le permiten escalar la carga de trabajo de lectura de los datos entre varias instancias replicadas. También ayudan a mejorar el rendimiento de las lecturas de datos y a aumentar la disponibilidad de los datos en el clúster de Amazon DocumentDB. Las réplicas de Amazon DocumentDB también son objetivos de conmutación por error y se promocionan rápidamente si se produce un error en la instancia principal del clúster de Amazon DocumentDB. 

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

Amazon DocumentDB está diseñado para ofrecer fiabilidad, durabilidad y tolerancia a errores. (Para mejorar la disponibilidad, debe configurar el clúster de Amazon DocumentDB de modo que tenga varias instancias de réplica en distintas zonas de disponibilidad). Amazon DocumentDB también incluye varias características automáticas que la convierten en una solución de base de datos de confianza. 

### Reparación automática del almacenamiento
<a name="how-it-works.reliability.storage-auto-repair"></a>

Amazon DocumentDB mantiene varias copias de los datos en tres zonas de disponibilidad, lo que reduce considerablemente la posibilidad de pérdida de datos debido a un error de almacenamiento. Amazon DocumentDB también detecta automáticamente los errores del volumen de clúster. Cuando se produce un error en un segmento de un volumen del clúster, Amazon DocumentDB lo repara inmediatamente. Utiliza los datos de los demás volúmenes que conforman el volumen del clúster para ayudar a garantizar que los datos del segmento reparado estén actualizados. Como resultado, Amazon DocumentDB evita la pérdida de datos y reduce la necesidad de realizar una point-in-time restauración para recuperarse de un error de instancia. 

### Calentamiento de caché que puede sobrevivir
<a name="how-it-works.reliability.survivable-cache-warming"></a>

Amazon DocumentDB administra su caché de páginas en un proceso independiente de la base de datos para que pueda sobrevivir independientemente de la base de datos. En el improbable caso de que se produzca un error de la base de datos, la caché de páginas permanece en la memoria. De este modo, se garantiza que el grupo del búfer contiene datos con el estado más actualizado al reiniciar la base de datos.

### Recuperación de bloqueos
<a name="how-it-works.reliability.crash-recovery"></a>

Amazon DocumentDB se ha diseñado para recuperarse de un bloqueo casi instantáneamente y continuar sirviendo sus datos de aplicación sin el registro binario. Amazon DocumentDB realiza las recuperaciones de bloqueos de forma asíncrona en subprocesos paralelos, de forma que su base de datos permanece abierta y disponible inmediatamente después de un bloqueo. 

### Administración de recursos
<a name="how-it-works.reliability.resource-governance"></a>

Amazon DocumentDB protege los recursos necesarios para ejecutar los procesos críticos del servicio, como las comprobaciones de estado. Para ello, y cuando una instancia experimente una presión de memoria elevada, Amazon DocumentDB limitará las solicitudes. Como resultado, es posible que algunas operaciones se pongan en cola para esperar a que disminuya la presión sobre la memoria. Si la presión de la memoria continúa, es posible que se agote el tiempo de espera de las operaciones en cola. Puede controlar si el servicio limita o no sus operaciones debido a la falta de memoria con las siguientes CloudWatch métricas:`LowMemThrottleQueueDepth`,,,`LowMemThrottleMaxQueueDepth`. `LowMemNumOperationsThrottled` `LowMemNumOperationsTimedOut` Para obtener más información, consulte Supervisión de Amazon DocumentDB con. CloudWatch Si observa una presión de memoria constante en su instancia como resultado de las LowMem CloudWatch métricas, le recomendamos que amplíe la instancia para proporcionar memoria adicional para su carga de trabajo.

## Opciones de preferencia de lectura
<a name="durability-consistency-isolation"></a>

Amazon DocumentDB utiliza un servicio de almacenamiento compartido nativo en la nube que replica los datos seis veces en tres zonas de disponibilidad para ofrecer altos niveles de durabilidad. Amazon DocumentDB no se basa en la replicación de datos en varias instancias para lograr durabilidad. Los datos del clúster serán duraderos tanto si este contiene una sola instancia como si tiene 15.

**Topics**
+ [Durabilidad de escritura](#durability-consistency-isolation.write-durability)
+ [Aislamiento de lectura](#durability-consistency-isolation.read-isolation)
+ [Coherencia de lectura](#durability-consistency-isolation.read-consistency)
+ [Alta disponibilidad](#durability-consistency-isolation.high-availability)
+ [Escalado de operaciones de lectura](#durability-consistency-isolation.scaling-reads)

### Durabilidad de escritura
<a name="durability-consistency-isolation.write-durability"></a>

Amazon DocumentDB utiliza un sistema de almacenamiento único, distribuido, tolerante a errores y de recuperación automática. Este sistema replica seis copias (V=6) de sus datos en tres zonas de disponibilidad para ofrecer una AWS alta disponibilidad y durabilidad. Al escribir datos, Amazon DocumentDB garantiza que todas las escrituras se registren de forma duradera en la gran mayoría de los nodos antes de confirmar la escritura al cliente. Si ejecuta un conjunto de réplicas de MongoDB de tres nodos y utiliza la opción Write Concern de `{w:3, j:true}`, obtendría la mejor configuración posible en comparación con Amazon DocumentDB.

Las operaciones de escritura en el clúster de Amazon DocumentDB debe procesarlas la instancia principal del clúster. Si se intenta escribir a una réplica, se producirá un error. Una operación de escritura confirmada desde una instancia principal de Amazon DocumentDB es duradera y no se puede revertir. Amazon DocumentDB es muy duradero de forma predeterminada y no admite una opción de escritura no duradera. No se puede modificar el nivel de durabilidad (es decir, Write Concern). Amazon DocumentDB ignora w=anything y, de hecho, es w: 3 y j: true. No puede reducirlo.

Debido a que en la arquitectura de Amazon DocumentDB la computación y el almacenamiento están separados, un clúster con una sola instancia es de larga duración. La durabilidad se gestiona en la capa de almacenamiento. Como resultado, un clúster de Amazon DocumentDB con una sola instancia y uno con tres instancias consiguen el mismo nivel de durabilidad. Puede configurar el clúster para que se adapte a su caso de uso específico a la vez que proporciona un alto nivel de durabilidad para sus datos.

Las operaciones de escritura en un clúster de Amazon DocumentDB son atómicas dentro del mismo documento. 

Amazon DocumentDB no admite la opción `wtimeout` y no devolverá un error si se especifica un valor. Las operaciones de escritura en la instancia principal de Amazon DocumentDB están aseguradas contra el bloqueo indefinido.

### Aislamiento de lectura
<a name="durability-consistency-isolation.read-isolation"></a>

Las operaciones de lectura de una instancia de Amazon DocumentDB solo devuelven datos que se conservan antes de que se inicie la consulta. Las operaciones de lectura nunca devuelven datos modificados una vez que se inicia la ejecución de la consulta, y las lecturas sucias no son posibles en ninguna circunstancia.

### Coherencia de lectura
<a name="durability-consistency-isolation.read-consistency"></a>

Los datos leídos de un clúster de Amazon DocumentDB son duraderos y no se pueden revertir. Puede modificar la lectura consistente para las operaciones de lectura de Amazon DocumentDB especificando la preferencia de lectura de la solicitud o conexión. Amazon DocumentDB no admite una opción de lectura no duradera.

Las lecturas de la instancia principal de un clúster de Amazon DocumentDB son muy consistentes en condiciones de funcionamiento normales y tienen read-after-write consistencia. Si se produce un evento de conmutación por error entre la escritura y la lectura posterior, el sistema puede devolver brevemente una lectura que no tiene una consistencia alta. Todas las lecturas que se realizan desde una réplica de lectura tienen consistencia final y devuelven los datos en el mismo orden, a menudo con un retardo de réplica inferior a los 100 ms.

#### Preferencias de lectura de Amazon DocumentDB
<a name="durability-consistency-isolation.read-preferences"></a>

Amazon DocumentDB permite configurar una opción de preferencia de lectura únicamente cuando los datos se leen del punto de conexión del clúster en modo de conjunto de réplicas. La configuración de una opción de preferencia de lectura afecta al modo en que el cliente o el controlador de MongoDB lee las solicitudes enviadas a las instancias del clúster de Amazon DocumentDB. Puede definir opciones de preferencia de lectura para una consulta específica o como una opción general en el controlador de MongoDB. (Consulte la documentación del cliente o controlador para obtener instrucciones sobre cómo definir una opción de preferencia de lectura).

Si el cliente o controlador no se conecta a un punto de conexión del clúster de Amazon DocumentDB en modo de conjunto de réplicas, el resultado de especificar una preferencia de lectura es incierto.

Amazon DocumentDB no admite la configuración de *conjuntos de etiquetas* como preferencia de lectura.

**Opciones de preferencia de lectura admitidas**
+ **`primary`**. especificar una preferencia de `primary` lectura ayuda a garantizar que todas las lecturas se dirijan a la instancia principal del clúster. Si la instancia principal no está disponible, se produce un error en la operación de lectura. Una preferencia de `primary` lectura proporciona read-after-write coherencia y es adecuada para casos de uso que dan prioridad a la read-after-write coherencia por encima de la alta disponibilidad y el escalado de lectura.

  En el siguiente ejemplo se especifica una preferencia de lectura `primary`:

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

   
+ **`primaryPreferred`**: si se especifica una preferencia de `primaryPreferred` lectura, las lecturas se redirigen a la instancia principal en condiciones normales de funcionamiento. Si se produce una conmutación por error de la instancia principal, el cliente envía las solicitudes a una réplica. Una preferencia de `primaryPreferred` lectura proporciona read-after-write consistencia durante el funcionamiento normal y, finalmente, lecturas consistentes durante un evento de conmutación por error. Una preferencia de `primaryPreferred` lectura es adecuada para los casos de uso que dan prioridad a read-after-write la coherencia por encima del escalado de lectura, pero que aún requieren una alta disponibilidad.

  En el siguiente ejemplo se especifica una preferencia de lectura `primaryPreferred`:

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

   
+ **`secondary`**: la especificación de una preferencia de `secondary` lectura garantiza que las lecturas solo se enruten a una réplica, nunca a la instancia principal. Si no hay instancias de réplica en el clúster, la solicitud de lectura produce un error. Al final, una preferencia de `secondary` lectura produce lecturas consistentes y es adecuada para los casos de uso en los que se da prioridad al rendimiento de escritura de la instancia principal por encima de la alta disponibilidad y read-after-write la coherencia.

  En el siguiente ejemplo se especifica una preferencia de lectura `secondary`:

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

   
+ **`secondaryPreferred`**: la especificación de una preferencia de `secondaryPreferred` lectura garantiza que las lecturas se enruten a una réplica de lectura cuando hay una o más réplicas activas. Si no hay instancias de réplica activas en el clúster, la solicitud de lectura se envía a la instancia principal. Una preferencia de lectura `secondaryPreferred` proporciona operaciones de lectura consistente final cuando una réplica de lectura atiende la operación de lectura. Proporciona read-after-write coherencia cuando la lectura la realiza la instancia principal (salvo que se produzcan eventos de conmutación por error). La preferencia de `secondaryPreferred` lectura es adecuada para los casos de uso que dan prioridad a la escalabilidad de la lectura y a la alta disponibilidad por encima de la coherencia. read-after-write

  En el siguiente ejemplo se especifica una preferencia de lectura `secondaryPreferred`:

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

   
+ **`nearest`**: al especificar una preferencia de `nearest` lectura, las lecturas se distribuyen únicamente en función de la latencia medida entre el cliente y todas las instancias del clúster de Amazon DocumentDB. Una preferencia de lectura `nearest` proporciona operaciones de lectura consistente final cuando una réplica de lectura atiende la operación de lectura. Ofrece read-after-write coherencia cuando la lectura la realiza la instancia principal (salvo los eventos de conmutación por error). La preferencia de `nearest` lectura es adecuada para los casos de uso que dan prioridad a lograr la latencia de lectura más baja posible y la alta disponibilidad por encima de la read-after-write coherencia y el escalado de lectura.

  En el siguiente ejemplo se especifica una preferencia de lectura `nearest`:

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

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

Amazon DocumentDB admite configuraciones de clúster altamente disponibles mediante el uso de réplicas como destinos de la conmutación por error de la instancia principal. Si la instancia principal produce un error, una réplica de Amazon DocumentDB pasará a ser la nueva instancia principal, con una breve interrupción durante la cual las solicitudes de lectura y escritura realizadas a la instancia principal producen una excepción.

Si el clúster de Amazon DocumentDB no contiene réplicas, se vuelve a crear la instancia principal cuando se produce un error. Sin embargo, promover una réplica de Amazon DocumentDB es mucho más rápido que volver a crear la instancia principal. Por lo tanto, le recomendamos que cree una o varias réplicas de Amazon DocumentDB como destinos de conmutación por error.

Las réplicas que se han diseñado para utilizarlas como destinos de conmutación por error deben ser de la misma clase de instancia que la instancia principal. Deberían aprovisionarse en zonas de disponibilidad distintas de la principal. Puede controlar las réplicas que deben usarse como destinos de la conmutación por error. Para obtener instrucciones sobre cómo configurar Amazon DocumentDB para una alta disponibilidad, consulte [Información general de la tolerancia a errores de clúster de Amazon DocumentDB](db-cluster-fault-tolerance.md).

### Escalado de operaciones de lectura
<a name="durability-consistency-isolation.scaling-reads"></a>

Las réplicas de Amazon DocumentDB son ideales para el escalado de lectura. Están totalmente dedicadas a las operaciones de lectura en el volumen del clúster, es decir, las réplicas no procesan operaciones de escritura. La replicación de datos se produce en el volumen del clúster y no entre las instancias. Por lo tanto, los recursos de cada réplica se dedican a procesar las consultas, y no a replicar y escribir datos.

Si su aplicación necesita más capacidad de lectura, puede añadir una réplica al clúster rápidamente (normalmente en menos de 10 minutos). Si los requisitos de capacidad de lectura disminuyen, puede eliminar las réplicas que no necesite. Con las réplicas de Amazon DocumentDB, solo paga por la capacidad de lectura que necesite.

Amazon DocumentDB permite el escalado de lectura en el cliente mediante el uso de opciones de preferencia de lectura. Para obtener más información, consulte [Preferencias de lectura de Amazon DocumentDB](#durability-consistency-isolation.read-preferences).

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

Las eliminaciones de un área de índice TTL logradas a través de un proceso en segundo plano son el mejor esfuerzo y no están garantizadas dentro de un período de tiempo específico. Factores como el tamaño de instancia, la utilización de recursos de instancia, el tamaño del documento y el rendimiento general pueden afectar la temporización de una eliminación de TTL.

Cuando el monitor TTL elimina sus documentos, cada eliminación incurre en costos de E/S, lo que aumentará su factura. Si el rendimiento y las tasas de eliminación de TTL aumentan, debería esperar un aumento en su factura debido al aumento del uso de E/S.

Al crear un índice TTL en una colección existente, debe eliminar todos los documentos caducados antes de crear el índice. La implementación actual del TTL está optimizada para eliminar una pequeña fracción de los documentos de la colección, lo que suele ocurrir si el TTL estaba activado en la colección desde el principio, y puede resultar en un aumento de las IOPS de lo necesario si es necesario eliminar un gran número de documentos de una sola vez.

En lugar de utilizar un índice TTL para eliminar documentos, puede segmentar documentos en colecciones según el tiempo y simplemente eliminar esas colecciones cuando los documentos ya no sean necesarios. Por ejemplo: puede crear una colección por semana y eliminarla sin incurrir en costos de E/S. Esto puede resultar considerablemente más rentable que utilizar un índice TTL.

## Recursos facturables
<a name="billing"></a>

### Identificación de los recursos facturables de Amazon DocumentDB
<a name="billing.identifying-billable-resources"></a>

Como base de datos administrada, Amazon DocumentDB cobra por las instancias, el almacenamiento, las E/S, las copias de seguridad y la transferencia de datos. Para obtener más información, consulte [Amazon DocumentDB (with MongoDB compatibility) Pricing](https://aws.amazon.com/documentdb/pricing/). 

Para descubrir los recursos facturables de tu cuenta y, si es posible, eliminarlos, puedes usar la opción Consola de administración de AWS o AWS CLI.

#### Usando el Consola de administración de AWS
<a name="billing.identifying-billable-resources-con"></a>

Con el Consola de administración de AWS, puede descubrir los clústeres, instancias e instantáneas de Amazon DocumentDB que ha aprovisionado para un determinado número. Región de AWS

**Para detectar clústeres, instancias e instantáneas**

1. [Inicie sesión en y abra la Consola de administración de AWS consola de Amazon DocumentDB en https://console.aws.amazon.com /docdb.](https://console.aws.amazon.com/docdb)

1. Para descubrir los recursos facturables en una región que no sea la región predeterminada, en la esquina superior derecha de la pantalla, elija la Región de AWS que desee buscar.   
![\[La región Virginia del Norte en el selector de regiones.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/db-cluster-console-region.png)

1. En el panel de navegación, seleccione el tipo de recurso facturable que le interesa: **Clusters (Clústeres)**, **Instances (Instancias)** o **Snapshots (Instantáneas)**.  
![\[Clústeres, instancias e instantáneas en el panel de navegación.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/db-navigation-pane-clusters-instances-snapshots.png)

1. Todos los clústeres, instancias o instantáneas aprovisionados para la región se indican en el panel de la derecha. Se le cobrará por los clústeres, las instancias y las instantáneas.

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

Con el AWS CLI, puede descubrir los clústeres, instancias e instantáneas de Amazon DocumentDB que ha aprovisionado para un determinado número. Región de AWS

**Para detectar clústeres e instancias**  
El código siguiente muestra todos los clústeres e instancias para la región especificada. Si desea buscar clústeres e instancias en la región predeterminada, puede omitir el parámetro `--region`.

**Example**  
Para Linux, macOS o 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"
```
La salida de esta operación será similar a lo que se indica a continuación.  

```
"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 detectar instantáneas**  
El código siguiente muestra todas las instantáneas para la región especificada. Si desea buscar instantáneas en la región predeterminada, puede omitir el parámetro `--region`.
Para Linux, macOS o 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]'
```
La salida de esta operación será similar a lo que se indica a continuación.  

```
[
    [
        "rds:docdb-2019-01-09-23-55-38-2019-02-13-00-06",
        "automated"
    ],
    [
        "test-snap",
        "manual"
    ]
]
```
Solo tiene que eliminar las instantáneas `manual`. Las instantáneas `Automated` se eliminan cuando elimina el clúster.

### Eliminación de recursos facturables no deseados
<a name="billing.deleting-billable-resources"></a>

Para eliminar un clúster, antes debe eliminar todas las instancias de ese clúster.
+ Para eliminar las instancias, consulte [Eliminación de una instancia de Amazon DocumentDB](db-instance-delete.md). 
**importante**  
Aunque elimine las instancias de un clúster, se le seguirá facturando por el uso del almacenamiento y las copias de seguridad asociadas a ese clúster. Para evitar todos los cargos, también debe eliminar el clúster y las instantáneas manuales.
+ Para eliminar clústeres, consulte [Eliminación de un clúster de Amazon DocumentDB](db-cluster-delete.md). 
+ Para eliminar instantáneas manuales, consulte [Eliminación de una instantánea del clúster](backup_restore-delete_cluster_snapshot.md). 

# ¿Qué es una base de datos de documentos?
<a name="what-is-document-db"></a>

Algunos desarrolladores no piensan en su modelo de datos en términos de filas y columnas normalizadas. Normalmente, en la capa de aplicación, los datos se representan como un documento JSON, porque es más intuitivo para los desarrolladores pensar en su modelo de datos como un documento. 

La popularidad de las bases de datos documentales ha aumentado porque permiten conservar los datos en una base de datos utilizando el mismo formato de modelo de documentos que se usa en el código de la aplicación. Las bases de datos de documentos son potentes e intuitivas APIs para un desarrollo flexible y ágil.

**Topics**
+ [Casos de uso](document-database-use-cases.md)
+ [Descripción de documentos](document-database-documents-understanding.md)
+ [Trabajo con documentos](document-database-working-with-documents.md)

# Casos de uso de bases de datos de documentos
<a name="document-database-use-cases"></a>

La necesidad de usar una base de datos de documentos u otro tipo de base de datos para administrar los datos dependerá del caso de uso. Las bases de datos documentales son útiles para cargas de trabajo que requieren un esquema flexible que permita un desarrollo rápido e iterativo. A continuación, se incluyen algunos ejemplos de casos de uso para los que las bases de datos documentales pueden ofrecer importantes ventajas:

**Topics**
+ [Perfiles de usuario](#document-databases-use-cases.user-profiles)
+ [Macrodatos en tiempo real](#document-databases-use-cases.big-data)
+ [Administración de contenido](#document-databases-use-cases.content-management)

## Perfiles de usuario
<a name="document-databases-use-cases.user-profiles"></a>

Como las bases de datos documentales tienen un esquema flexible, pueden almacenar documentos que tengan atributos y valores de datos diferentes. Las bases de datos documentales son una solución práctica para los perfiles online en los que diferentes usuarios proporcionan diferentes tipos de información. Mediante una base de datos de documentos, puede almacenar cada perfil de usuario de forma eficaz almacenando solo los atributos que son específicos de cada usuario.

Suponga que un usuario decide añadir o eliminar la información de su perfil. En este caso, su documento podría reemplazarse fácilmente por una versión actualizada que contuviera los atributos y datos recién añadidos u omitir todos los atributos y datos recién omitidos. Las bases de datos documentales administran fácilmente este nivel de detalle y fluidez.

## Macrodatos en tiempo real
<a name="document-databases-use-cases.big-data"></a>

Históricamente, la capacidad de extraer información de los datos operativos se veía obstaculizada por el hecho de que las bases de datos operativas y las bases de datos analíticas se mantenían en diferentes entornos: operativos y, respectivamente. business/reporting Ser capaces de extraer información operativa en tiempo real es fundamental en un entorno empresarial altamente competitivo. Mediante el uso de bases de datos documentales, una empresa puede almacenar y administrar datos operativos de cualquier origen e incluir los datos de forma simultánea en el motor de BI elegido para su análisis. No es necesario tener dos entornos.

## Administración de contenido
<a name="document-databases-use-cases.content-management"></a>

Para administrar eficazmente el contenido, debe poder recopilar y agrupar contenido de una variedad de orígenes y enviárselo al cliente. Debido a su esquema flexible, las bases de datos documentales son perfectas para recopilar y almacenar cualquier tipo de datos. Puede utilizarlas para crear e incorporar nuevos tipos de contenido, incluido el contenido generado por el usuario, como imágenes, comentarios, y vídeos.

# Descripción de documentos
<a name="document-database-documents-understanding"></a>

Las bases de datos de documentos se utilizan para almacenar datos semiestructurados como un documento en lugar de normalizar los datos entre varias tablas, cada una con una estructura única y fija, como en una base de datos relacional. Los documentos almacenados en una base de datos de documentos usan pares de clave-valor anidados para proporcionar la estructura o el esquema del documento. Sin embargo, se pueden almacenar diferentes tipos de documentos en la misma base de datos de documentos, cumpliendo así el requisito de procesar datos similares que tienen diferentes formatos. Por ejemplo, como cada documento es autodescriptivo, los documentos codificados en JSON para un almacenamiento en línea que se describen en el tema [Documentos de ejemplo en una base de datos de documentos](#document-database-documents) se pueden almacenar en la misma base de datos de documentos. 

**Topics**
+ [Terminología SQL frente a terminología no relacional](#document-database-sql-vs-nosql-terms)
+ [Documentos simples](#document-database-documents-simple)
+ [Documentos incrustados](#document-database-documents-embeded)
+ [Documentos de ejemplo en una base de datos de documentos](#document-database-documents)
+ [Descripción de la normalización en una base de datos de documentos](#document-database-normalization)

## Terminología SQL frente a terminología no relacional
<a name="document-database-sql-vs-nosql-terms"></a>

En la tabla siguiente se compara la terminología utilizada en las bases de datos documentales (MongoDB) con la terminología utilizada en las bases de datos SQL.


|  SQL  |  MongoDB  | 
| --- | --- | 
|  Tabla  |  Recopilación  | 
|  Fila  |  Documento  | 
|  Columna  |  Campo  | 
|  Clave principal  |  ObjectId  | 
|  Índice  |  Índice  | 
|  Visualización  |  Visualización  | 
|  Tabla u objeto anidado  |  Documento incrustado  | 
|  Matriz  |  Matriz  | 

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

Todos los documentos de una base de datos de documentos son autodescriptivos. En esta documentación, se utilizan documentos con formato JSON, pero se podrían usar otros medios de codificación.

Un documento simple tiene uno o varios campos que están en el mismo nivel del documento. En el siguiente ejemplo, los campos `SSN`, `LName`, `FName`, `DOB`, `Street`, `City`, `State-Province`, `PostalCode` y `Country` son todos elementos del mismo nivel en el 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"
}
```

Cuando la información está organizada en un documento simple, cada campo se administra por separado. Para recuperar la dirección de una persona, debe recuperar `Street`, `City`, `State-Province`, `PostalCode` y `Country` como elementos de datos individuales.

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

Un documento complejo organiza sus datos mediante la creación de documentos incrustados en el documento. Los documentos incrustados ayudan a administrar los datos en grupos y como elementos de datos individuales, lo que sea más eficaz para cada caso. Utilizando el ejemplo anterior, podría incrustar un documento `Address` en el documento principal, lo que produciría la siguiente estructura de documentos:

```
{
   "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" 
   }
}
```

Ahora puede obtener acceso a los datos del documento como campos individuales ( `"SSN":` ), como un documento incrustado ( `"Address":` ) o como un miembro de un documento incrustado ( `"Address":{"Street":}` ).

## Documentos de ejemplo en una base de datos de documentos
<a name="document-database-documents"></a>

Como se indicó anteriormente, puesto que cada documento de una base de datos de documentos es autodescriptivo, la estructura de los documentos de una base de datos de documentos puede ser diferente. Los siguientes dos documentos, uno para un libro y otro para una publicación periódica, son diferentes estructuralmente. Sin embargo, ambos pueden estar en la misma base de datos de documentos.

A continuación, se muestra un documento de libro de ejemplo:

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

A continuación, se muestra un documento de publicación periódica de ejemplo con dos artículos:

```
{
    "_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 la estructura de estos dos documentos. Con una base de datos relacional, necesita separar las tablas "periodical" y "books", o una sola tabla con los campos no utilizados, como "Publication," "Issue," "Articles" y "MI", como valores `null`. Como las bases de datos de documentos son semiestructuradas, en las que cada documento define su propia estructura, estos dos documentos pueden coexistir en la misma base de datos de documentos sin campos `null`. Las bases de datos documentales son adecuadas para trabajar con datos dispersos.

El desarrollo de una base de datos de documentos permite el desarrollo rápido e iterativo. Esto se debe a que puede cambiar la estructura de los datos de un documento de forma dinámica, sin tener que cambiar el esquema de toda la colección. Las bases de datos documentales están especialmente indicadas para un desarrollo ágil y para entornos que cambian dinámicamente.

## Descripción de la normalización en una base de datos de documentos
<a name="document-database-normalization"></a>

Las bases de datos documentales no están normalizadas; los datos que se encuentran en un documento se pueden repetir en otro documento. Asimismo, puede haber discrepancias de datos entre los documentos. Considere, por ejemplo, un escenario en el que realiza una compra en una tienda online y todos los detalles de sus compras se almacenan en un único documento. El documento podría tener un aspecto similar al siguiente documento JSON:

```
{
    "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" 
}
```

Toda esta información se almacena como un documento en una colección de transacciones. Posteriormente, se da cuenta de que ha olvidado comprar un artículo. Así que vuelve a iniciar sesión en la misma tienda y realiza otra compra, que también se almacena como otro documento en la colección de transacciones.

```
{
    "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 la redundancia entre estos dos documentos: su nombre y el ID de comprador (y, si utilizó la misma tarjeta de crédito, la información de la tarjeta de crédito). Pero eso no es un problema, porque el almacenamiento es barato y cada documento registra completamente una transacción que se puede recuperar rápidamente con una sencilla consulta de clave-valor que no requiere uniones.

También hay una discrepancia aparente entre los dos documentos: la información de su tarjeta de crédito. Esta solo es una discrepancia aparente, ya que es probable que utilizara una tarjeta de crédito diferente para cada compra. Cada documento es correcto para la transacción que documenta.

# Trabajo con documentos
<a name="document-database-working-with-documents"></a>

Como base de datos de documentos, Amazon DocumentDB facilita el almacenamiento, la consulta y la indexación de datos JSON. En Amazon DocumentDB, una colección es similar a una tabla de una base de datos relacional, con la salvedad de que no se aplica ningún esquema a todos los documentos. Las colecciones le permiten agrupar documentos similares manteniéndolos en la misma base de datos, sin necesidad de que tengan la misma estructura.

Sigamos con los documentos de ejemplo de las secciones anteriores y suponga ahora que tiene colecciones para `reading_material` y `office_supplies`. Es responsabilidad de su software decidir a qué colección pertenece un documento.

En los siguientes ejemplos se utiliza la API de MongoDB para mostrar cómo añadir, consultar, actualizar y eliminar documentos.

**Topics**
+ [Adición de documentos](#document-database-adding-documents)
+ [Consulta de documentos](#document-database-queries)
+ [Actualización de documentos](#document-database-updating)
+ [Eliminación de documentos](#document-database-deleting)

## Adición de documentos
<a name="document-database-adding-documents"></a>

En Amazon DocumentDB, se crea una base de datos cuando se agrega por primera vez un documento a una colección. En este ejemplo, está creando una colección denominada `example` en la base de datos `test`, que es la base de datos predeterminada cuando se conecta a un clúster. Dado que la conexión se crea implícitamente cuando se inserta el primer documento, no hay comprobación de errores del nombre de la colección. Por lo tanto, un error tipográfico en el nombre de la colección, como `eexample` en lugar de `example`, creará y agregará el documento a la colección `eexample` en lugar de la colección prevista. La comprobación de errores debe realizarla su aplicación.

En los ejemplos siguientes, se utiliza la API de MongoDB para añadir documentos.

**Topics**
+ [Adición de un solo documento](#document-database-adding-documents-single)
+ [Adición de varios documentos](#document-database-adding-documents-multiple)

### Adición de un solo documento
<a name="document-database-adding-documents-single"></a>

Para añadir un único documento a una colección, utilice la operación `insertOne( {} )` con el documento que desea añadir a la colección.

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

La salida de esta operación será similar a lo que se indica a continuación (formato JSON).

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

### Adición de varios documentos
<a name="document-database-adding-documents-multiple"></a>

Para añadir varios documentos a una colección, utilice la operación `insertMany( [{},...,{}] )` con una lista de los documentos que desea añadir a la colección. Aunque los documentos de esta lista en particular tengan diferentes esquemas, se pueden añadir a la misma colección.

```
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
            }
        }    
    ]
)
```

La salida de esta operación será similar a lo que se indica a continuación (formato JSON).

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

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

A veces, es posible que tenga que examinar el inventario de su tienda online para que los clientes puedan ver y comprar lo que usted vende. Consultar una colección es relativamente fácil, tanto si desea consultar todos los documentos de la colección como solo aquellos que cumplan un determinado criterio.

Para consultar documentos, utilice la operación `find()`. El comando `find()` tiene un único parámetro de documento que define los criterios que se utilizan al elegir los documentos que se devuelven. El resultado de `find()` es un documento formateado como una sola línea de texto sin saltos de línea. Para formatear el documento resultante para facilitar su lectura, utilice `find().pretty()`. En todos los ejemplos que se muestran en este tema, se utiliza `.pretty()` para formatear la salida.

Utilice los cuatro documentos que insertó en la colección `example` de los dos ejercicios anteriores `insertOne()` e `insertMany()`.

**Topics**
+ [Recuperar todos los documentos de una colección](#document-database-queries-all-documents)
+ [Recuperación de documentos que coincidan con un valor de campo](#document-database-queries-match-criteria)
+ [Recuperación de documentos que coincidan con un documento incrustado](#document-database-queries-entire-embedded-document)
+ [Recuperación de documentos que coincidan con un valor de campo de un documento incrustado](#document-database-queries-embeded-document-field)
+ [Recuperación de documentos que coincidan con una matriz](#document-database-queries-array-match)
+ [Recuperación de documentos que coincidan con un valor de una matriz](#document-database-queries-array-value-match)
+ [Recuperación de documentos mediante operadores](#document-database-query-operators)

### Recuperar todos los documentos de una colección
<a name="document-database-queries-all-documents"></a>

Para recuperar todos los documentos de la colección, utilice la operación `find()` con un documento de consulta vacío.

La siguiente consulta devuelve todos los documentos de la colección `example`.

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

### Recuperación de documentos que coincidan con un valor de campo
<a name="document-database-queries-match-criteria"></a>

Para recuperar todos los documentos que coincidan con un campo y valor, utilice la operación `find()` con un documento de consulta que identifique los campos y valores que desee.

Si se utilizan los documentos anteriores, esta consulta devuelve todos los documentos cuyo campo "Item" contiene "Pen".

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

### Recuperación de documentos que coincidan con un documento incrustado
<a name="document-database-queries-entire-embedded-document"></a>

Para buscar todos los documentos que coinciden con un documento incrustado, utilice la operación `find()` con un documento de consulta que especifique el nombre del documento incrustado y todos los campos y los valores de ese documento incrustado.

Cuando se buscan coincidencias con un documento incrustado, el documento incrustado del documento debe tener el mismo nombre que en la consulta. Además, los campos y los valores del documento incrustado deben coincidir con la consulta.

La siguiente consulta devuelve únicamente el documento "Poster Paint". Esto se debe a que "Pen" tiene diferentes valores para "`MinOnHand`" y "`OnHand`", y "Spray Paint" tiene un campo más (`OrderQnty`) que el documento de consulta.

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

### Recuperación de documentos que coincidan con un valor de campo de un documento incrustado
<a name="document-database-queries-embeded-document-field"></a>

Para buscar todos los documentos que coinciden con un documento incrustado, utilice la operación `find()` con un documento de consulta que especifique el nombre del documento incrustado y todos los campos y los valores de ese documento incrustado.

Dados los documentos anteriores, la siguiente consulta utiliza la "notación de puntos" para especificar el documento incrustado y los campos de interés. Se devolverá cualquier documento que coincida con ellos, independientemente de los otros campos que puedan existir en el documento incrustado. La consulta devuelve "Poster Paint" y "Spray Paint", ya que ambos coinciden con los campos y los valores especificados.

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

### Recuperación de documentos que coincidan con una matriz
<a name="document-database-queries-array-match"></a>

Para buscar todos los documentos que coincidan con una matriz, utilice la operación `find()` con el nombre de la matriz que le interese y todos los valores de esa matriz. La consulta devuelve todos los documentos que tengan una matriz con ese nombre y cuyos valores de la matriz sean idénticos y estén en el mismo orden que en la consulta.

La siguiente consulta devuelve únicamente "Pen", ya que "Poster Paint" tiene un color adicional (White) y "Spray Paint" tiene los colores en otro orden.

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

### Recuperación de documentos que coincidan con un valor de una matriz
<a name="document-database-queries-array-value-match"></a>

Para buscar todos los documentos que tengan un valor determinado en una matriz, utilice la operación `find()` con el nombre de la matriz y el valor que le interese.

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

La operación anterior devuelve los tres documentos, ya que cada uno de ellos tiene una matriz denominada `Colors` y el valor "`Red`" en algún lugar de la matriz. Si especifica el valor "`White`", la consulta solo devolvería "Poster Paint".

### Recuperación de documentos mediante operadores
<a name="document-database-query-operators"></a>

La siguiente consulta devuelve todos los documentos en los que el valor de "`Inventory.OnHand`" es menor que 50.

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

Para obtener una lista de los operadores de consulta admitidos, consulte [Operadores de consulta y proyección](mongo-apis.md#mongo-apis-query). 

## Actualización de documentos
<a name="document-database-updating"></a>

Normalmente, los documentos no son estáticos y se actualizan como parte de los flujos de trabajo de la aplicación. En los siguientes ejemplos se muestran algunas de las formas en que puede actualizar los documentos.

Para actualizar un documento existente, use la operación `update()`. La operación `update()` tiene dos parámetros de documento. El primer documento identifica el documento o los documentos que se van a actualizar. El segundo documento especifica las actualizaciones que se deben realizar.

Al actualizar un campo existente ya sea un campo sencillo, una matriz o un documento incrustado debe especificar el nombre del campo y sus valores. Al final de la operación, es como si el campo del documento antiguo se ha sustituido por el campo y los valores nuevos.

**Topics**
+ [Actualizar los valores de un campo existente](#document-database-updating-existing-fields)
+ [Agregado de un campo nuevo](#document-database-updating-adding-field)
+ [Sustitución de un documento incrustado](#document-database-replacing-embedded-document)
+ [Inserción de campos nuevos en un documento incrustado](#document-database-updating-adding-field-embedded)
+ [Eliminación de un campo de un documento](#document-database-remove-field)
+ [Eliminación de un campo de varios documentos](#document-database-remove-field-all)

### Actualizar los valores de un campo existente
<a name="document-database-updating-existing-fields"></a>

Utilice los cuatro documentos siguientes que ha añadido anteriormente para las siguientes operaciones de actualización.

```
{
    "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 actualizar un campo sencillo**  
Para actualizar un campo sencillo, utilice `update()` con `$set` para especificar el nombre del campo y el valor nuevo. En el siguiente ejemplo, se cambia `Item` de "Pen" a "Gel Pen".

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

Los resultados de esta operación serán similares a lo que se indica a continuación (formato JSON).

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

**Para actualizar una matriz**  
En el siguiente ejemplo, se sustituye la gama de colores existente por una matriz nueva que incluye `Orange` y elimina `White` de la lista de colores. La lista de colores nueva se encuentra en el orden especificado en la operación `update()`.

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

Los resultados de esta operación serán similares a lo que se indica a continuación (formato JSON).

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

### Agregado de un campo nuevo
<a name="document-database-updating-adding-field"></a>

Para modificar un documento añadiendo uno o varios campos nuevos, utilice la operación `update()` con un documento de consulta que identifique el documento que se va a insertar y los nuevos campos y valores que se van a insertar mediante el operador `$set`.

En el siguiente ejemplo, se añade el campo `UnitPrice` con el valor `3.99` en el documento Spray Paints. Tenga en cuenta que el valor `3.99` es numérico y no una cadena.

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

Los resultados de esta operación serán similares a lo que se indica a continuación (JSON format).

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

### Sustitución de un documento incrustado
<a name="document-database-replacing-embedded-document"></a>

Para modificar un documento sustituyendo un documento incrustado, utilice la operación `update()` con documentos que identifiquen el documento incrustado y sus campos y valores nuevos mediante el operador `$set`.

Dado el documento siguiente.

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

**Para sustituir un documento incrustado**  
En el ejemplo siguiente, se sustituye el documento Date actual por uno nuevo que solo tiene los campos `Month` y `Day` en el que se ha eliminado `Year`.

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

Los resultados de esta operación serán similares a lo que se indica a continuación (formato JSON).

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

### Inserción de campos nuevos en un documento incrustado
<a name="document-database-updating-adding-field-embedded"></a>

**Para añadir campos a un documento incrustado**  
Para modificar un documento añadiendo uno o varios campos nuevos a un documento incrustado, utilice la operación `update()` con documentos que identifiquen el documento incrustado y la "notación de puntos" para especificar el documento incrustado y los campos y valores nuevos que se van a insertar mediante el operador `$set`.

Teniendo en cuenta el siguiente documento, el código siguiente utiliza la "notación de puntos" para insertar los campos `Year` y `DoW` en el documento incrustado `Date` y `Words` en el documento principal.

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

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

Los resultados de esta operación serán similares a lo que se indica a continuación (formato JSON).

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

### Eliminación de un campo de un documento
<a name="document-database-remove-field"></a>

Para modificar un documento eliminando uno se sus campos, utilice la operación `update()` con un documento de consulta que identifique el documento cuyo campo se va a eliminar y el operador `$unset` para especificar campo que se va a eliminar.

En el siguiente ejemplo, se elimina el campo `Words` del documento anterior.

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

Los resultados de esta operación serán similares a lo que se indica a continuación (formato JSON).

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

### Eliminación de un campo de varios documentos
<a name="document-database-remove-field-all"></a>

Para modificar un documento mediante la eliminación de un campo de varios documentos, utilice la operación `update()` con el operador `$unset` y la opción `multi` establecida en `true`.

En el ejemplo siguiente se quita el campo `Inventory` de todos los documentos de la colección de ejemplo. Si un documento no tiene el campo `Inventory`, no se realiza ninguna acción en ese documento. Si `multi: true` se omite, la acción solo se realiza en el primer documento que cumple el criterio.

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

## Eliminación de documentos
<a name="document-database-deleting"></a>

Para eliminar un documento de la base de datos, utilice la operación `remove()`, especificando el documento que se va a eliminar. El código siguiente elimina "Gel Pen" de la colección `example`.

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

Para eliminar todos los documentos de la base de datos, use la operación `remove()` con una consulta vacía.

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