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