Учебники

DocumentDB – обновить документ

В этой главе мы узнаем, как обновить документы. Используя портал Azure, вы можете легко обновить документ, открыв документ в проводнике документов и обновив его в редакторе, как текстовый файл.

Обновить документ

Нажмите кнопку «Сохранить». Теперь, когда вам нужно изменить документ с помощью .Net SDK, вы можете просто заменить его. Вам не нужно удалять и воссоздавать его, что, помимо утомления, также приведет к изменению идентификатора ресурса, чего не стоит делать при изменении документа. Вот следующие шаги для обновления документа с помощью .Net SDK.

Давайте посмотрим на следующую задачу ReplaceDocuments, где мы будем запрашивать документы, для которых свойство isNew имеет значение true, но мы не получим ни одного, потому что их нет. Итак, давайте изменим документы, которые мы добавили ранее, те, чьи имена начинаются с New Customer.

Шаг 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(); 
}

Шаг 2 – Получить документы, которые будут обновлены, используя тот же запрос STARTSWITH, и это дает нам документы, которые мы возвращаем сюда как динамические объекты.

Шаг 3 – Присоедините свойство isNew и установите для него значение true для каждого документа.

Шаг 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); 
   }
	
}

Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод.