

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo dei documenti
<a name="document-database-working-with-documents"></a>

Essendo un database di documenti, Amazon DocumentDB semplifica l'archiviazione, l'interrogazione e l'indicizzazione dei dati JSON. In Amazon DocumentDB, una raccolta è analoga a una tabella in un database relazionale, tranne per il fatto che non esiste un unico schema applicato a tutti i documenti. Le raccolte consentono di raggruppare documenti simili mantenendoli comunque nello stesso database, senza richiedere che siano identici a livello di struttura.

Utilizzando i documenti di esempio delle sezioni precedenti, è probabile che tu disponga di raccolte per `reading_material` e `office_supplies`. È responsabilità del software stabilire a quale raccolta appartenga un documento.

Gli esempi seguenti utilizzano l'API MongoDB per mostrare come aggiungere, eseguire query, aggiornare ed eliminare i documenti.

**Topics**
+ [Aggiungere documenti](#document-database-adding-documents)
+ [Interrogazione di documenti](#document-database-queries)
+ [Aggiornamento dei documenti](#document-database-updating)
+ [Eliminazione di documenti](#document-database-deleting)

## Aggiungere documenti
<a name="document-database-adding-documents"></a>

In Amazon DocumentDB, un database viene creato quando si aggiunge per la prima volta un documento a una raccolta. In questo esempio, viene creata una raccolta denominata `example` nel database `test`, che è il database predefinito quando ci si connette a un cluster. Poiché la raccolta viene creata implicitamente quando viene inserito il primo documento, non viene effettuato alcun controllo degli errori sul nome della raccolta. Di conseguenza, un errore di battitura nel nome della raccolta, ad esempio `eexample` anziché `example`, creerà e aggiungerà il documento alla raccolta `eexample` anziché la raccolta desiderata. Il controllo degli errori deve essere gestito dall'applicazione.

Gli esempi seguenti utilizzano l'API MongoDB per aggiungere documenti.

**Topics**
+ [Aggiungere un singolo documento](#document-database-adding-documents-single)
+ [Aggiungere più documenti](#document-database-adding-documents-multiple)

### Aggiungere un singolo documento
<a name="document-database-adding-documents-single"></a>

Per aggiungere un singolo documento a una raccolta, utilizza l'operazione `insertOne( {} )` con il documento da aggiungere alla raccolta.

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

L'aspetto dell'output di questa operazione è simile al seguente (formato JSON).

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

### Aggiungere più documenti
<a name="document-database-adding-documents-multiple"></a>

Per aggiungere più documenti a una raccolta, utilizza l'operazione `insertMany( [{},...,{}] )` con un elenco di documenti da aggiungere alla raccolta. Anche se i documenti in questo specifico elenco hanno schemi diversi, ciascuno può essere aggiunto alla stessa raccolta.

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

L'aspetto dell'output di questa operazione è simile al seguente (formato JSON).

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

## Interrogazione di documenti
<a name="document-database-queries"></a>

A volte, potrebbe essere necessario cercare nell'inventario dello store online, in modo che i clienti possano vedere e acquistare ciò che vendi. Eseguire query su una raccolta è relativamente semplice, sia per le ricerche su tutti i documenti della raccolta che per quelle solo sui documenti che soddisfano un determinato criterio.

Per eseguire una query per i documenti, utilizza l'operazione `find()`. Il comando `find()` ha un parametro per documenti singoli che definisce i criteri da utilizzare nella scelta dei documenti da restituire. L'output di `find()` è un documento formattato su una sola riga di testo senza interruzioni di riga. Per formattare il documento di output per facilitare la lettura, utilizza `find().pretty()`. Tutti gli esempi di questo argomento utilizzano `.pretty()` per formattare l'output.

Usa i quattro documenti che hai inserito nella `example` raccolta nei due esercizi precedenti: `insertOne()` e. `insertMany()`

**Topics**
+ [Recupero di tutti i documenti di una raccolta](#document-database-queries-all-documents)
+ [Recupero di documenti che corrispondono a un valore di campo](#document-database-queries-match-criteria)
+ [Recupero di documenti che corrispondono a un documento incorporato](#document-database-queries-entire-embedded-document)
+ [Recupero di documenti che corrispondono a un valore di campo in un documento incorporato](#document-database-queries-embeded-document-field)
+ [Recupero di documenti che corrispondono a un array](#document-database-queries-array-match)
+ [Recupero di documenti che corrispondono a un valore in una matrice](#document-database-queries-array-value-match)
+ [Recupero di documenti tramite operatori](#document-database-query-operators)

### Recupero di tutti i documenti di una raccolta
<a name="document-database-queries-all-documents"></a>

Per recuperare tutti i documenti nella raccolta, usa l'operazione `find()` con un documento di query vuoto.

La query seguente restituisce tutti i documenti della raccolta `example`.

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

### Recupero di documenti che corrispondono a un valore di campo
<a name="document-database-queries-match-criteria"></a>

Per recuperare tutti i documenti che corrispondono a un campo e a un valore, usa l'operazione `find()` con un documento di query che identifica i campi e i valori per la corrispondenza.

Usando i documenti precedenti, questa query restituisce tutti i documenti in cui il campo "Item" è uguale a "Pen".

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

### Recupero di documenti che corrispondono a un documento incorporato
<a name="document-database-queries-entire-embedded-document"></a>

Per trovare tutti i documenti che corrispondono a un documento incorporato, utilizza l'operazione `find()` con un documento di query che specifica il nome del documento incorporato e tutti i campi e i valori per quel documento incorporato.

Quando si esegue il confronto di un documento incorporato, il documento incorporato del documento deve avere lo stesso nome che ha nella query. Inoltre, i campi e i valori nel documento incorporato devono corrispondere alla query.

La seguente query restituisce solo il documento "Poster Paint". Questo perché "Pen" ha valori diversi per "`OnHand`" e "`MinOnHand`" e "Spray Paint" ha un ulteriore campo (`OrderQnty`) rispetto al documento di query.

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

### Recupero di documenti che corrispondono a un valore di campo in un documento incorporato
<a name="document-database-queries-embeded-document-field"></a>

Per trovare tutti i documenti che corrispondono a un documento incorporato, utilizza l'operazione `find()` con un documento di query che specifica il nome del documento incorporato e tutti i campi e i valori per quel documento incorporato.

Considerati i documenti precedenti, la seguente query utilizza la "dot notation" (notazione col punto) per specificare il documento incorporato e i campi di interesse. Vengono restituiti tutti i documenti che corrispondono a questi campi, indipendentemente da quali altri campi possono essere presenti nel documento incorporato. La query restituisce "Poster Paint" e "Spray Paint" perché entrambi corrispondono ai campi e ai valori specificati.

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

### Recupero di documenti che corrispondono a un array
<a name="document-database-queries-array-match"></a>

Per trovare tutti i documenti che corrispondono a una matrice, utilizzare l'operazione `find()` con il nome della matrice richiesta e tutti i valori in quella matrice. La query restituisce tutti i documenti che hanno una matrice con quel nome in cui i valori della matrice sono identici e nello stesso ordine rispetto alla query.

La seguente query restituisce solo "Pen" perché" Poster Paint" ha un ulteriore colore (White) mentre "Spray Paint" ha i colori in un ordine diverso.

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

### Recupero di documenti che corrispondono a un valore in una matrice
<a name="document-database-queries-array-value-match"></a>

Per trovare tutti i documenti che hanno un valore specifico di matrice, utilizza l'operazione `find()` con il nome della matrice e il valore richiesto.

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

L'operazione precedente restituisce tutti e tre i documenti, in quanto ciascuno di essi dispone di una matrice denominata `Colors` e del valore "`Red`" all'interno della matrice. Se si specifica il valore "`White`", la query restituisce solo "Poster Paint".

### Recupero di documenti tramite operatori
<a name="document-database-query-operators"></a>

La seguente query restituisce tutti i documenti in cui il valore "`Inventory.OnHand`" è inferiore a 50.

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

Per un elenco degli operatori di query supportati, consulta [Operatori di interrogazione e proiezione](mongo-apis.md#mongo-apis-query). 

## Aggiornamento dei documenti
<a name="document-database-updating"></a>

In genere, i documenti non sono statici e vengono aggiornati come parte dei flussi di lavoro dell'applicazione. Gli esempi seguenti mostrano alcune opzioni di aggiornamento dei documenti.

Per aggiornare un documento esistente, utilizza l'operazione `update()`. L'operazione `update()` presenta due parametri del documento. Il primo documento identifica il documento o i documenti da aggiornare. Il secondo documento specifica gli aggiornamenti da eseguire.

Quando si aggiorna un campo esistente, che si tratti di un campo semplice, di un array o di un documento incorporato, si specifica il nome del campo e i relativi valori. Al termine dell'operazione è come se il campo nel documento precedente fosse stato sostituito dal campo e dai valori nuovi.

**Topics**
+ [Aggiornamento dei valori di un campo esistente](#document-database-updating-existing-fields)
+ [Aggiungere un nuovo campo](#document-database-updating-adding-field)
+ [Sostituzione di un documento incorporato](#document-database-replacing-embedded-document)
+ [Inserimento di nuovi campi in un documento incorporato](#document-database-updating-adding-field-embedded)
+ [Rimuovere un campo da un documento](#document-database-remove-field)
+ [Rimuovere un campo da più documenti](#document-database-remove-field-all)

### Aggiornamento dei valori di un campo esistente
<a name="document-database-updating-existing-fields"></a>

Utilizza i seguenti quattro documenti aggiunti in precedenza per le seguenti operazioni di aggiornamento.

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

**Per aggiornare un campo semplice**  
Per aggiornare un campo semplice, utilizza `update()` con `$set` per specificare il nome del campo e il nuovo valore. L'esempio seguente modifica l'elemento `Item` da "Pen" a "Gel Pen".

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

L'aspetto dei risultati di questa operazione è simile al seguente.

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

**Per aggiornare una matrice**  
L'esempio seguente sostituisce la matrice esistente di colori con una nuova matrice che comprende `Orange` e rimuove `White` dall'elenco dei colori. Il nuovo elenco di colori è nell'ordine specificato nell'operazione `update()`.

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

L'aspetto dei risultati di questa operazione è simile al seguente.

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

### Aggiungere un nuovo campo
<a name="document-database-updating-adding-field"></a>

Per modificare un documento aggiungendo uno o più nuovi campi, utilizza l'operazione `update()` con un documento di query che identifica il documento in cui inserire i dati e i nuovi campi e valori da inserire utilizzando l'operatore `$set`.

L'esempio seguente aggiunge il campo `UnitPrice` con il valore `3.99` al documento Spray Paints. Si noti che il valore `3.99` è numerico e non una stringa.

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

I risultati di questa operazione sono simili ai seguenti (formato JSON).

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

### Sostituzione di un documento incorporato
<a name="document-database-replacing-embedded-document"></a>

Per modificare un documento sostituendo un documento incorporato, utilizza l'operazione `update()` con i documenti che identificano il documento incorporato e i nuovi campi e valori utilizzando l'operatore `$set`.

Considerato il seguente documento.

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

**Per sostituire un documento incorporato**  
L'esempio seguente sostituisce l'attuale documento Date con uno nuovo che ha solo i campi `Month` e `Day`, mentre `Year` è stato eliminato.

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

L'aspetto dei risultati di questa operazione è simile al seguente.

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

### Inserimento di nuovi campi in un documento incorporato
<a name="document-database-updating-adding-field-embedded"></a>

**Per aggiungere campi a un documento incorporato**  
Per modificare un documento aggiungendo uno o più campi nuovi a un documento incorporato, utilizza l'operazione `update()` con i documenti che identificano il documento incorporato e la "dot notation" per specificare il documento incorporato e i nuovi campi e valori da inserire utilizzando l'operatore `$set`.

Considerato il seguente documento, il codice seguente usa la "dot notation" per inserire i campi `Year` e `DoW` nel documento incorporato `Date` e `Words` nel documento padre.

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

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

L'aspetto dei risultati di questa operazione è simile al seguente.

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

### Rimuovere un campo da un documento
<a name="document-database-remove-field"></a>

Per modificare un documento rimuovendo un campo, utilizza l'operazione `update()` con un documento di query che identifica il documento da cui rimuovere il campo e l'operatore `$unset` per specificare il campo da rimuovere.

L'esempio seguente rimuove il campo `Words` dal documento precedente.

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

L'aspetto dei risultati di questa operazione è simile al seguente.

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

### Rimuovere un campo da più documenti
<a name="document-database-remove-field-all"></a>

Per modificare un documento rimuovendo un campo da più documenti, utilizza l'operazione `update()` con l'operatore `$unset` e l'opzione `multi` impostata su `true`.

L'esempio seguente rimuove il campo `Inventory` da tutti i documenti della raccolta di esempi. Se un documento non contiene il campo `Inventory`, non viene eseguita alcuna azione. Se `multi: true` viene omesso, l'azione viene eseguita solo nel primo documento che soddisfa il criterio.

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

## Eliminazione di documenti
<a name="document-database-deleting"></a>

Per rimuovere un documento dal database, utilizza l'operazione `remove()`, specificando il documento da rimuovere. Il codice seguente rimuove "Gel Pen" dalla raccolta `example`.

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

Per rimuovere tutti i documenti dal database, utilizzate l'`remove()`operazione con una query vuota.

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