DocumentDB - aktualizacja dokumentu
W tym rozdziale dowiemy się, jak aktualizować dokumenty. Korzystając z Azure Portal, możesz łatwo zaktualizować dokument, otwierając dokument w Eksploratorze dokumentów i aktualizując go w edytorze, takim jak plik tekstowy.
Kliknij przycisk „Zapisz”. Teraz, gdy musisz zmienić dokument za pomocą .Net SDK, możesz go po prostu zastąpić. Nie musisz go usuwać i odtwarzać, co oprócz tego, że jest żmudne, zmieniłoby również identyfikator zasobu, czego nie chciałbyś robić, gdy tylko modyfikujesz dokument. Oto następujące kroki, aby zaktualizować dokument za pomocą .Net SDK.
Rzućmy okiem na następujące zadanie ReplaceDocuments, w którym będziemy wyszukiwać dokumenty, w których właściwość isNew ma wartość true, ale nie otrzymamy żadnego, ponieważ żadnego nie ma. Zmodyfikujmy więc dokumenty, które dodaliśmy wcześniej, te, których nazwy zaczynają się od New Customer.
Step 1 - Dodaj właściwość isNew do tych dokumentów i ustaw jej wartość na 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 - Pobierz dokumenty do aktualizacji za pomocą tego samego zapytania STARTSWITH, a to daje nam dokumenty, które otrzymujemy jako obiekty dynamiczne.
Step 3 - Dołącz właściwość isNew i ustaw ją na true dla każdego dokumentu.
Step 4 - Wywołaj ReplaceDocumentAsync, przekazując SelfLink dokumentu wraz ze zaktualizowanym dokumentem.
Teraz, aby udowodnić, że to zadziałało, wyszukaj dokumenty, w których isNew jest równe prawdzie. Nazwijmy powyższe zapytania z zadania 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);
}
}
Gdy powyższy kod zostanie skompilowany i wykonany, otrzymasz następujące dane wyjściowe.
**** 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