DocumentDB – 更新文档
DocumentDB – 更新文档
在本章中,我们将学习如何更新文档。使用 Azure 门户,您可以通过在文档资源管理器中打开文档并在编辑器中像文本文件一样更新它来轻松更新文档。
单击“保存”按钮。现在,当您需要使用 .Net SDK 更改文档时,您只需替换它即可。您不需要删除并重新创建它,这不仅很乏味,而且还会更改资源 ID,这在您只是修改文档时是不想做的。以下是使用 .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); } }
编译并执行上述代码后,您将收到以下输出。
**** 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