DocumentDB - 更新文档

在本章中,我们将学习如何更新文档.使用Azure门户,您可以通过在文档资源管理器中打开文档并在编辑器中将其更新为文本文件来轻松更新文档.

更新文档

点击"保存"按钮.现在,当您需要使用.Net SDK更改文档时,您只需替换它即可.您不需要删除并重新创建它,除了繁琐之外,还会更改资源ID,当您只是修改文档时,您不希望这样做.以下是使用.Net SDK更新文档的步骤.

让我们看看下面的ReplaceDocuments任务,我们将查询isNew属性为true的文档,但是我们将得到没有,因为没有.所以,让我们修改我们之前添加的文件,名称以新客户开头的文件.

第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); 
   }
	
}

编译并执行上述代码时,您将收到以下输出.

**** 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