

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 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( { } )
```