DocumentDB - Обновить документ
В этой главе мы узнаем, как обновлять документы. Используя портал Azure, вы можете легко обновить документ, открыв документ в проводнике документов и обновив его в редакторе, как текстовый файл.
Нажмите кнопку «Сохранить». Теперь, когда вам нужно изменить документ с помощью .Net SDK, вы можете просто заменить его. Вам не нужно удалять и воссоздавать его, что, помимо утомительности, также изменило бы идентификатор ресурса, чего вы бы не хотели делать, когда вы просто изменяете документ. Вот следующие шаги для обновления документа с помощью .Net SDK.
Давайте посмотрим на следующую задачу ReplaceDocuments, в которой мы будем запрашивать документы, в которых свойство isNew имеет значение true, но мы ничего не получим, потому что их нет. Итак, давайте изменим документы, которые мы добавили ранее, те, чьи имена начинаются с New Customer.
Step 1 - Добавьте в эти документы свойство isNew и установите для него значение 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 - Получите документы для обновления, используя тот же запрос STARTSWITH, который дает нам документы, которые мы возвращаем сюда как динамические объекты.
Step 3 - Прикрепите свойство isNew и установите для него значение true для каждого документа.
Step 4 - Вызовите ReplaceDocumentAsync, передав SelfLink документа вместе с обновленным документом.
Теперь, чтобы доказать, что это сработало, запросите документы, в которых isNew равно true. Назовем указанные выше запросы из задачи 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);
}
}
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод.
**** 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