DocumentDB - Aggiorna documento
In questo capitolo impareremo come aggiornare i documenti. Utilizzando il portale di Azure, è possibile aggiornare facilmente il documento aprendo il documento in Esplora documenti e aggiornandolo nell'editor come un file di testo.
Fare clic sul pulsante "Salva". Ora, quando è necessario modificare un documento utilizzando .Net SDK, è sufficiente sostituirlo. Non è necessario eliminarlo e ricrearlo, il che oltre a essere noioso, cambierebbe anche l'id della risorsa, cosa che non vorresti fare quando stai solo modificando un documento. Di seguito sono riportati i passaggi seguenti per aggiornare il documento utilizzando .Net SDK.
Diamo un'occhiata alla seguente attività ReplaceDocuments in cui interrogheremo i documenti in cui la proprietà isNew è vera, ma non ne otterremo nessuno perché non ce ne sono. Quindi, modifichiamo i documenti che abbiamo aggiunto in precedenza, quelli i cui nomi iniziano con Nuovo cliente.
Step 1 - Aggiungere la proprietà isNew a questi documenti e impostarne il valore su true.
private async static Task ReplaceDocuments(DocumentClient client) {
Console.WriteLine();
Console.WriteLine(">>> Replace Documents <<<");
Console.WriteLine();
Console.WriteLine("Quering for documents with 'isNew' flag");
var sql = "SELECT * FROM c WHERE c.isNew = true";
var documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
Console.WriteLine("Documents with 'isNew' flag: {0} ", documents.Count);
Console.WriteLine();
Console.WriteLine("Quering for documents to be updated");
sql = "SELECT * FROM c WHERE STARTSWITH(c.name, 'New Customer') = true";
documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
Console.WriteLine("Found {0} documents to be updated", documents.Count);
foreach (var document in documents) {
document.isNew = true;
var result = await client.ReplaceDocumentAsync(document._self, document);
var updatedDocument = result.Resource;
Console.WriteLine("Updated document 'isNew' flag: {0}", updatedDocument.isNew);
}
Console.WriteLine();
Console.WriteLine("Quering for documents with 'isNew' flag");
sql = "SELECT * FROM c WHERE c.isNew = true";
documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
Console.WriteLine("Documents with 'isNew' flag: {0}: ", documents.Count);
Console.WriteLine();
}
Step 2 - Ottieni i documenti da aggiornare utilizzando la stessa query STARTSWITH e che ci dà i documenti, che stiamo recuperando qui come oggetti dinamici.
Step 3 - Allega la proprietà isNew e impostala su true per ogni documento.
Step 4 - Chiama ReplaceDocumentAsync, passando il SelfLink del documento, insieme al documento aggiornato.
Ora, solo per dimostrare che ha funzionato, interroga i documenti dove isNew è uguale a true. Chiamiamo le query precedenti dall'attività CreateDocumentClient.
private static async Task CreateDocumentClient() {
// Create a new instance of the DocumentClient
using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
'myfirstdb'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First();
//await CreateDocuments(client);
//QueryDocumentsWithSql(client);
//await QueryDocumentsWithPaging(client);
//QueryDocumentsWithLinq(client);
await ReplaceDocuments(client);
}
}
Quando il codice precedente viene compilato ed eseguito, riceverai il seguente output.
**** Replace Documents ****
Quering for documents with 'isNew' flag
Documents with 'isNew' flag: 0
Quering for documents to be updated
Found 2 documents to be updated
Updated document ‘isNew’ flag: True
Updated document ‘isNew’ flag: True
Quering for documents with 'isNew' flag
Documents with 'isNew' flag: 2