DocumentDB - Belgeyi Güncelle
Bu bölümde belgeleri nasıl güncelleyeceğimizi öğreneceğiz. Azure portalını kullanarak, belgeyi Belge Gezgini'nde açıp bir metin dosyası gibi düzenleyicide güncelleyerek belgeyi kolayca güncelleyebilirsiniz.
"Kaydet" düğmesini tıklayın. Artık .Net SDK kullanarak bir belgeyi değiştirmeniz gerektiğinde, onu değiştirebilirsiniz. Silmenize ve yeniden oluşturmanıza gerek yoktur, bu sıkıcı olmasının yanı sıra, yalnızca bir belgeyi değiştirirken yapmak istemeyeceğiniz kaynak kimliğini de değiştirir. Belgeyi .Net SDK kullanarak güncellemek için aşağıdaki adımlar.
İsNew özelliğinin doğru olduğu belgeleri sorgulayacağımız aşağıdaki ReplaceDocuments görevine bir göz atalım, ancak hiçbiri olmadığı için hiçbiri almayacağız. Öyleyse daha önce eklediğimiz belgeleri, adı Yeni Müşteri ile başlayan belgeleri değiştirelim.
Step 1 - isNew özelliğini bu belgelere ekleyin ve değerini true olarak ayarlayın.
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 - Aynı STARTSWITH sorgusunu kullanarak güncellenecek belgeleri alın ve bu bize burada dinamik nesneler olarak geri aldığımız belgeleri verir.
Step 3 - isNew özelliğini ekleyin ve her belge için true olarak ayarlayın.
Step 4 - Belgenin SelfLink'ini güncellenmiş belgeyle birlikte ileterek ReplaceDocumentAsync'i çağırın.
Şimdi sadece bunun işe yaradığını kanıtlamak için, isNew'in true olduğu belgeleri sorgulayın. Yukarıdaki sorguları CreateDocumentClient görevinden çağıralım.
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);
}
}
Yukarıdaki kod derlenip çalıştırıldığında, aşağıdaki çıktıyı alacaksınız.
**** 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