DocumentDB - แทรกเอกสาร

ในบทนี้เราจะได้ทำงานกับเอกสารจริงในคอลเล็กชัน คุณสามารถสร้างเอกสารโดยใช้พอร์ทัล Azure หรือ. Net SDK

การสร้างเอกสารด้วย Azure Portal

มาดูขั้นตอนต่อไปนี้เพื่อเพิ่มเอกสารลงในคอลเลกชันของคุณ

Step 1 - เพิ่มคอลเลกชั่นใหม่ตระกูลระดับราคา S1 ใน myfirstdb

Step 2 - เลือกคอลเลคชัน Families และคลิกที่ตัวเลือกสร้างเอกสารเพื่อเปิดใบมีดเอกสารใหม่

นี่เป็นเพียงโปรแกรมแก้ไขข้อความธรรมดา ๆ ที่ให้คุณพิมพ์ JSON สำหรับเอกสารใหม่

Step 3 - เนื่องจากนี่คือการป้อนข้อมูลดิบให้ป้อนเอกสารแรกของเรา

{
   "id": "AndersenFamily", 
   "lastName": "Andersen", 
	
   "parents": [ 
      { "firstName": "Thomas", "relationship": "father" }, 
      { "firstName": "Mary Kay", "relationship": "mother" } 
   ], 
	
   "children": [ 
      { 
         "firstName": "Henriette Thaulow", 
         "gender": "female", 
         "grade": 5, 
         "pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ] 
      } 
   ], 
	
   "location": { "state": "WA", "county": "King", "city": "Seattle"}, 
   "isRegistered": true
}

เมื่อคุณป้อนเอกสารด้านบนคุณจะเห็นหน้าจอต่อไปนี้

โปรดสังเกตว่าเราได้ระบุรหัสสำหรับเอกสาร จำเป็นต้องใช้ค่า id เสมอและต้องไม่ซ้ำกันในเอกสารอื่น ๆ ทั้งหมดในคอลเล็กชันเดียวกัน เมื่อคุณปล่อยทิ้งไว้ DocumentDB จะสร้างขึ้นมาให้คุณโดยอัตโนมัติโดยใช้ GUID หรือ Global Unique Identifier

id เป็นสตริงเสมอและต้องไม่เป็นตัวเลขวันที่บูลีนหรือวัตถุอื่นและต้องมีความยาวไม่เกิน 255 อักขระ

นอกจากนี้โปรดสังเกตโครงสร้างลำดับชั้นของเอกสารซึ่งมีคุณสมบัติระดับบนสุดบางอย่างเช่น id ที่ต้องการเช่นเดียวกับ lastName และ isRegistered แต่ยังมีคุณสมบัติที่ซ้อนกัน

ตัวอย่างเช่นคุณสมบัติ parent ถูกจัดให้เป็นอาร์เรย์ JSON ตามที่แสดงโดยวงเล็บเหลี่ยม นอกจากนี้เรายังมีอาร์เรย์อื่นสำหรับเด็กแม้ว่าจะมีลูกเดียวในอาร์เรย์ในตัวอย่างนี้

Step 4 - คลิกปุ่ม 'บันทึก' เพื่อบันทึกเอกสารและเราได้สร้างเอกสารแรกของเรา

ดังที่คุณเห็นว่าการจัดรูปแบบสวย ๆ ถูกนำไปใช้กับ JSON ของเราซึ่งจะแบ่งทุกคุณสมบัติในบรรทัดของตัวเองโดยเยื้องด้วยช่องว่างเพื่อแสดงระดับการซ้อนกันของแต่ละคุณสมบัติ

พอร์ทัลมี Document Explorer ดังนั้นให้ใช้ตอนนี้เพื่อดึงเอกสารที่เราเพิ่งสร้างขึ้น

Step 5- เลือกฐานข้อมูลและคอลเล็กชันใด ๆ ภายในฐานข้อมูลเพื่อดูเอกสารในคอลเล็กชันนั้น ขณะนี้เรามีฐานข้อมูลเพียงฐานข้อมูลชื่อ myfirstdb โดยมีคอลเล็กชันหนึ่งชื่อ Families ซึ่งทั้งสองได้รับการเลือกไว้ล่วงหน้าที่นี่ในเมนูแบบเลื่อนลง

ตามค่าเริ่มต้น Document Explorer จะแสดงรายการเอกสารที่ไม่มีการกรองภายในคอลเลกชัน แต่คุณยังสามารถค้นหาเอกสารใด ๆ โดยใช้ ID หรือเอกสารหลาย ๆ ชุดโดยใช้การค้นหาสัญลักษณ์แทนของ ID บางส่วน

เรามีเอกสารเพียงฉบับเดียวในคอลเล็กชันของเราและเราเห็น ID บนหน้าจอต่อไปนี้ AndersonFamily

Step 6 - คลิกที่ ID เพื่อดูเอกสาร

การสร้างเอกสารด้วย. NET SDK

ดังที่คุณทราบว่าเอกสารเป็นเพียงทรัพยากรอีกประเภทหนึ่งและคุณคุ้นเคยกับวิธีจัดการทรัพยากรโดยใช้ SDK แล้ว

  • ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างเอกสารและทรัพยากรอื่น ๆ คือแน่นอนว่าเอกสารเหล่านี้ไม่มีสคีมา

  • จึงมีตัวเลือกมากมาย โดยปกติคุณสามารถทำงานกราฟออบเจ็กต์ JSON หรือแม้กระทั่งสตริงดิบของข้อความ JSON แต่คุณยังสามารถใช้วัตถุแบบไดนามิกที่ช่วยให้คุณเชื่อมโยงกับคุณสมบัติในรันไทม์ได้โดยไม่ต้องกำหนดคลาสในเวลาคอมไพล์

  • คุณยังสามารถทำงานกับออบเจ็กต์ C # จริงหรือเอนทิตีตามที่เรียกซึ่งอาจเป็นคลาสโดเมนธุรกิจของคุณ

มาเริ่มสร้างเอกสารโดยใช้. Net SDK ต่อไปนี้เป็นขั้นตอน

Step 1 - สร้างอินสแตนซ์ DocumentClient จากนั้นเราจะค้นหาฐานข้อมูล myfirstdb จากนั้นค้นหาคอลเล็กชัน MyCollection ซึ่งเราเก็บไว้ในคอลเล็กชันตัวแปรส่วนตัวนี้เพื่อให้สามารถเข้าถึงได้ทั่วทั้งคลาส

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); 
   } 
}

Step 2 - สร้างเอกสารบางอย่างในงาน CreateDocuments

private async static Task CreateDocuments(DocumentClient client) {
   Console.WriteLine(); 
   Console.WriteLine("**** Create Documents ****"); 
   Console.WriteLine();
	
   dynamic document1Definition = new {
      name = "New Customer 1", address = new {
         addressType = "Main Office", 
         addressLine1 = "123 Main Street", 
         location = new {
            city = "Brooklyn", stateProvinceName = "New York" 
         }, postalCode = "11229", countryRegionName = "United States"
      }, 
   };
	
   Document document1 = await CreateDocument(client, document1Definition); 
   Console.WriteLine("Created document {0} from dynamic object", document1.Id); 
   Console.WriteLine(); 
}

เอกสารแรกจะถูกสร้างขึ้นจากวัตถุไดนามิกนี้ สิ่งนี้อาจดูเหมือน JSON แต่แน่นอนว่าไม่ใช่ นี่คือรหัส C # และเรากำลังสร้างออบเจ็กต์. NET จริง แต่ไม่มีนิยามคลาส แต่คุณสมบัติจะถูกอนุมานจากวิธีเริ่มต้นวัตถุ

โปรดสังเกตว่าเราไม่ได้ให้คุณสมบัติ Id สำหรับเอกสารนี้

ตอนนี้เรามาดู CreateDocument กัน ดูเหมือนรูปแบบเดียวกับที่เราเห็นในการสร้างฐานข้อมูลและคอลเล็กชัน

private async static Task<Document> CreateDocument(DocumentClient client,
   object documentObject) {
	
   var result = await client.CreateDocumentAsync(collection.SelfLink, documentObject); 
   var document = result.Resource;
	
   Console.WriteLine("Created new document: {0}\r\n{1}", document.Id, document); 
   return result; 
}

Step 3- คราวนี้เราเรียก CreateDocumentAsync ระบุ SelfLink ของคอลเล็กชันที่เราต้องการเพิ่มเอกสาร เราได้รับการตอบกลับพร้อมคุณสมบัติทรัพยากรที่ในกรณีนี้แสดงถึงเอกสารใหม่ที่มีคุณสมบัติที่ระบบสร้างขึ้น

อ็อบเจ็กต์ Document เป็นคลาสที่กำหนดไว้ใน SDK ซึ่งสืบทอดมาจากรีซอร์สดังนั้นจึงมีคุณสมบัติของรีซอร์สทั่วไปทั้งหมด แต่ยังรวมถึงคุณสมบัติไดนามิกที่กำหนดเอกสารที่ไม่มีสคีมาเอง

private async static Task CreateDocuments(DocumentClient client) {
   Console.WriteLine(); 
   Console.WriteLine("**** Create Documents ****"); 
   Console.WriteLine();  
	
   dynamic document1Definition = new {
      name = "New Customer 1", address = new { 
         addressType = "Main Office",
         addressLine1 = "123 Main Street", 
         location = new {
            city = "Brooklyn", stateProvinceName = "New York" 
         }, postalCode = "11229", countryRegionName = "United States" 
      }, 
   };
	
   Document document1 = await CreateDocument(client, document1Definition); 
   Console.WriteLine("Created document {0} from dynamic object", document1.Id); 
   Console.WriteLine();
}

เมื่อโค้ดด้านบนถูกคอมไพล์และดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

**** Create Documents ****  
Created new document: 34e9873a-94c8-4720-9146-d63fb7840fad {
   "name": "New Customer 1", 
	
   "address": { 
      "addressType": "Main Office", 
      "addressLine1": "123 Main Street", 
      "location": { 
         "city": "Brooklyn", "stateProvinceName": "New York" 
      }, 
      "postalCode": "11229", "countryRegionName": "United States"
   }, 
	
   "id": "34e9873a-94c8-4720-9146-d63fb7840fad", 
   "_rid": "Ic8LAMEUVgACAAAAAAAAAA==", 
   "_ts": 1449812756, 
   "_self": "dbs/Ic8LAA==/colls/Ic8LAMEUVgA=/docs/Ic8LAMEUVgACAAAAAAAAAA==/", 
   "_etag": "\"00001000-0000-0000-0000-566a63140000\"", 
   "_attachments": "attachments/" 
} 
Created document 34e9873a-94c8-4720-9146-d63fb7840fad from dynamic object

อย่างที่คุณเห็นเรายังไม่ได้ให้ ID แต่ DocumentDB สร้างรหัสนี้ให้เราสำหรับเอกสารใหม่