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!” ส่งคืนโดยขั้นตอนการจัดเก็บของเรา