Banco de Dados de Documentos - Atualizar Documento
Neste capítulo, aprenderemos como atualizar os documentos. Usando o portal do Azure, você pode atualizar facilmente o documento abrindo o documento no Explorador de documentos e atualizando-o no editor como um arquivo de texto.
Clique no botão 'Salvar'. Agora, quando você precisar alterar um documento usando .Net SDK, basta substituí-lo. Você não precisa deletar e recriá-lo, o que além de ser tedioso, também alteraria a id do recurso, o que você não gostaria de fazer quando está apenas modificando um documento. Aqui estão as seguintes etapas para atualizar o documento usando .Net SDK.
Vamos dar uma olhada na tarefa ReplaceDocuments a seguir, onde consultaremos os documentos em que a propriedade isNew é verdadeira, mas não obteremos nenhum porque não há nenhum. Portanto, vamos modificar os documentos que adicionamos anteriormente, aqueles cujos nomes começam com Novo cliente.
Step 1 - Adicione a propriedade isNew a esses documentos e defina seu valor como 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 - Pegue os documentos a serem atualizados usando a mesma consulta STARTSWITH e isso nos dá os documentos, que estamos recebendo aqui como objetos dinâmicos.
Step 3 - Anexe a propriedade isNew e defina-a como true para cada documento.
Step 4 - Chame ReplaceDocumentAsync, passando o SelfLink do documento, junto com o documento atualizado.
Agora, apenas para provar que funcionou, consulte os documentos em que isNew é igual a true. Vamos chamar as consultas acima da tarefa 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);
}
}
Quando o código acima for compilado e executado, você receberá a seguinte saída.
**** 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