DocumentDB SQL - การรวม JavaScript

ทุกวันนี้ JavaScript มีอยู่ทั่วไปและไม่ใช่แค่ในเบราว์เซอร์เท่านั้น DocumentDB รวบรวม JavaScript เป็นประเภทหนึ่งของ T-SQL ในยุคปัจจุบันและสนับสนุนการดำเนินการตามธุรกรรมของลอจิก JavaScript ภายในเครื่องฐานข้อมูล DocumentDB จัดเตรียมรูปแบบการเขียนโปรแกรมสำหรับการเรียกใช้ตรรกะแอปพลิเคชันที่ใช้ JavaScript โดยตรงบนคอลเลกชันในแง่ของโพรซีเดอร์และทริกเกอร์ที่เก็บ

มาดูตัวอย่างที่เราสร้างขั้นตอนการจัดเก็บง่ายๆ ต่อไปนี้เป็นขั้นตอน -

Step 1 - สร้างแอปพลิเคชันคอนโซลใหม่

Step 2- เพิ่มใน. NET SDK จาก NuGet เรากำลังใช้. NET SDK ที่นี่ซึ่งหมายความว่าเราจะเขียนโค้ด C # บางส่วนเพื่อสร้างดำเนินการและลบโพรซีเดอร์ที่เก็บไว้ของเรา แต่โพรซีเดอร์ที่จัดเก็บเองจะถูกเขียนด้วย JavaScript

Step 3 - คลิกขวาที่โครงการใน Solution explorer

Step 4 - เพิ่มไฟล์ JavaScript ใหม่สำหรับขั้นตอนการจัดเก็บและเรียกมันว่า HelloWorldStoreProce.js

ทุกกระบวนงานที่จัดเก็บเป็นเพียงฟังก์ชัน JavaScript ดังนั้นเราจะสร้างฟังก์ชันใหม่และโดยปกติแล้วเราจะตั้งชื่อฟังก์ชันนี้ด้วย HelloWorldStoreProce. ไม่สำคัญว่าเราจะตั้งชื่อให้กับฟังก์ชันเลยหรือไม่ DocumentDB จะอ้างถึงโพรซีเดอร์ที่จัดเก็บนี้โดย Id ที่เราระบุเมื่อสร้างเท่านั้น

function HelloWorldStoreProce() { 
   var context = getContext(); 
   var response = context.getResponse(); 
   response.setBody('Hello, and welcome to DocumentDB!'); 
}

โพรซีเดอร์ที่เก็บไว้ทั้งหมดคือรับอ็อบเจ็กต์การตอบสนองจากบริบทและเรียกใช้ setBodyวิธีการส่งคืนสตริงให้กับผู้โทร ในรหัส C # เราจะสร้างโพรซีเดอร์ที่เก็บไว้ดำเนินการแล้วลบออก

ขั้นตอนที่จัดเก็บจะถูกกำหนดขอบเขตต่อคอลเลคชันดังนั้นเราจะต้องใช้ SelfLink ของคอลเล็กชันเพื่อสร้างโพรซีเดอร์ที่จัดเก็บ

Step 5 - คำถามแรกสำหรับไฟล์ myfirstdb ฐานข้อมูลแล้วสำหรับไฟล์ MyCollection คอลเลกชัน

การสร้างกระบวนงานที่จัดเก็บก็เหมือนกับการสร้างทรัพยากรอื่น ๆ ใน DocumentDB

private async static Task SimpleStoredProcDemo() {  
   var endpoint = "https://azuredocdbdemo.documents.azure.com:443/"; 
   var masterKey = 
      "BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";
	  
   using (var client = new DocumentClient(new Uri(endpoint), masterKey)) { 
      // Get database 
      Database database = client 
         .CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'") 
         .AsEnumerable() 
         .First();
			
      // Get collection 
      DocumentCollection collection = client 
         .CreateDocumentCollectionQuery(database.CollectionsLink, "SELECT * FROM 
         c WHERE c.id = 'MyCollection'") 
         .AsEnumerable() 
         .First();
			
      // Create stored procedure 
      var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js"); 
		
      var sprocDefinition = new StoredProcedure { 
         Id = "HelloWorldStoreProce", 
         Body = sprocBody 
      };
	  
      StoredProcedure sproc = await client.
         CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition); 
      Console.WriteLine("Created stored procedure {0} ({1})", 
         sproc.Id, sproc.ResourceId);
				  
      // Execute stored procedure 
      var result = await client.ExecuteStoredProcedureAsync
      
       (sproc.SelfLink); Console.WriteLine("Executed stored procedure; response = {0}", result.Response); // Delete stored procedure await client.DeleteStoredProcedureAsync(sproc.SelfLink); Console.WriteLine("Deleted stored procedure {0} ({1})", sproc.Id, sproc.ResourceId); } } 
      

Step 6 - ขั้นแรกให้สร้างออบเจ็กต์คำจำกัดความด้วย Id สำหรับทรัพยากรใหม่จากนั้นเรียกใช้หนึ่งในวิธีการสร้างบนไฟล์ DocumentClientวัตถุ. ในกรณีของกระบวนงานที่จัดเก็บคำจำกัดความจะรวมถึง Id และรหัส JavaScript จริงที่คุณต้องการส่งไปยังเซิร์ฟเวอร์

Step 7 - โทร File.ReadAllText เพื่อแยกรหัสโพรซีเดอร์ที่เก็บไว้ออกจากไฟล์ JS

Step 8 - กำหนดรหัสโพรซีเดอร์ที่เก็บไว้ให้กับคุณสมบัติร่างกายของออบเจ็กต์นิยาม

เท่าที่เกี่ยวข้องกับ DocumentDB Id ที่เราระบุที่นี่ในคำจำกัดความคือชื่อของกระบวนงานที่จัดเก็บโดยไม่คำนึงถึงสิ่งที่เราตั้งชื่อฟังก์ชัน JavaScript จริงๆ

อย่างไรก็ตามเมื่อสร้างโพรซีเดอร์ที่เก็บไว้และอ็อบเจ็กต์ฝั่งเซิร์ฟเวอร์อื่น ๆ ขอแนะนำให้เราตั้งชื่อฟังก์ชัน JavaScript และชื่อฟังก์ชันเหล่านั้นตรงกับ Id ที่เราตั้งไว้ในนิยามสำหรับ DocumentDB

Step 9 - โทร CreateStoredProcedureAsyncผ่านใน SelfLink สำหรับ MyCollectionการรวบรวมและการกำหนดขั้นตอนการจัดเก็บ สิ่งนี้จะสร้างกระบวนงานที่เก็บไว้และResourceId DocumentDB ที่กำหนดให้

Step 10 - เรียกขั้นตอนที่เก็บไว้ ExecuteStoredProcedureAsyncรับพารามิเตอร์ type ที่คุณตั้งค่าเป็นชนิดข้อมูลที่คาดไว้ของค่าที่ส่งคืนโดยโพรซีเดอร์ที่เก็บไว้ซึ่งคุณสามารถระบุเป็นอ็อบเจ็กต์ได้หากคุณต้องการให้อ็อบเจ็กต์ไดนามิกส่งคืน นั่นคือออบเจ็กต์ที่คุณสมบัติจะถูกผูกไว้ที่รันไทม์

ในตัวอย่างนี้เรารู้ว่าขั้นตอนการจัดเก็บของเราเป็นเพียงการส่งคืนสตริงดังนั้นเราจึงเรียก ExecuteStoredProcedureAsync<string>.

ต่อไปนี้คือการนำไฟล์ Program.cs ไปใช้งานอย่างสมบูรณ์

using Microsoft.Azure.Documents; 
using Microsoft.Azure.Documents.Client; 
using Microsoft.Azure.Documents.Linq; 

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.IO; 

using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace DocumentDBStoreProce { 
   class Program { 
      private static void Main(string[] args) { 
         Task.Run(async () => { 
            await SimpleStoredProcDemo(); 
         }).Wait(); 
      } 
	  
      private async static Task SimpleStoredProcDemo() {  
         var endpoint = "https://azuredocdbdemo.documents.azure.com:443/"; 
         var masterKey = 
            "BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";  
				
         using (var client = new DocumentClient(new Uri(endpoint), masterKey)) { 
            // Get database 
            Database database = client 
               .CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'")
               .AsEnumerable() 
               .First(); 
					
            // Get collection 
            DocumentCollection collection = client 
               .CreateDocumentCollectionQuery(database.CollectionsLink, 
               "SELECT * FROM c WHERE c.id = 'MyCollection'") 
               .AsEnumerable() 
               .First();
					 
            // Create stored procedure 
            var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js"); 
				
            var sprocDefinition = new StoredProcedure { 
               Id = "HelloWorldStoreProce", 
               Body = sprocBody 
            };
			
            StoredProcedure sproc = await client
               .CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition);
					
            Console.WriteLine("Created stored procedure {0} ({1})", sproc
               .Id, sproc.ResourceId);
					 
            // Execute stored procedure 
            var result = await client
               .ExecuteStoredProcedureAsync<string>(sproc.SelfLink); 
            Console.WriteLine("Executed stored procedure; response = {0}", 
               result.Response);
					
            // Delete stored procedure 
            await client.DeleteStoredProcedureAsync(sproc.SelfLink); 
            Console.WriteLine("Deleted stored procedure {0} ({1})", 
               sproc.Id, sproc.ResourceId); 
         } 
      } 
   } 
}

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

Created stored procedure HelloWorldStoreProce (Ic8LAMEUVgACAAAAAAAAgA==)

Executed stored procedure; response = Hello, and welcome to DocumentDB!

ดังที่เห็นในเอาต์พุตด้านบนคุณสมบัติการตอบกลับมีคำว่า“ สวัสดีและยินดีต้อนรับสู่ DocumentDB!” ส่งคืนโดยขั้นตอนการจัดเก็บของเรา