DocumentDB - อัปเดตเอกสาร
ในบทนี้เราจะเรียนรู้วิธีการปรับปรุงเอกสาร ด้วยการใช้พอร์ทัล Azure คุณสามารถอัปเดตเอกสารได้อย่างง่ายดายโดยเปิดเอกสารใน Document explorer และอัปเดตในโปรแกรมแก้ไขเช่นไฟล์ข้อความ
คลิกปุ่ม 'บันทึก' ตอนนี้เมื่อคุณต้องการเปลี่ยนเอกสารโดยใช้. Net SDK คุณก็สามารถแทนที่ได้ คุณไม่จำเป็นต้องลบและสร้างมันขึ้นมาใหม่ซึ่งนอกจากจะน่าเบื่อแล้วยังเปลี่ยนรหัสทรัพยากรซึ่งคุณไม่ต้องการทำเมื่อคุณเพิ่งแก้ไขเอกสาร ขั้นตอนต่อไปนี้เพื่ออัปเดตเอกสารโดยใช้. Net SDK
ลองดูที่งาน ReplaceDocuments ต่อไปนี้ที่เราจะค้นหาเอกสารที่คุณสมบัติ isNew เป็นจริง แต่เราจะไม่ได้รับเลยเพราะไม่มีเลย เรามาแก้ไขเอกสารที่เราเพิ่มไว้ก่อนหน้าซึ่งมีชื่อขึ้นต้นด้วยลูกค้าใหม่
Step 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();
}
Step 2 - รับเอกสารที่จะอัปเดตโดยใช้แบบสอบถาม STARTSWITH เดียวกันและให้เอกสารแก่เราซึ่งเราจะกลับมาที่นี่ในฐานะวัตถุไดนามิก
Step 3 - แนบคุณสมบัติ isNew และตั้งค่าเป็น true สำหรับแต่ละเอกสาร
Step 4 - เรียก ReplaceDocumentAsync ส่งผ่าน SelfLink ของเอกสารพร้อมกับเอกสารที่อัปเดต
ตอนนี้เพื่อพิสูจน์ว่าสิ่งนี้ใช้ได้ผลให้ค้นหาเอกสารที่ isNew เท่ากับจริง เรียกแบบสอบถามข้างต้นจากงาน 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