DocumentDBSQL-JavaScript統合

最近のJavaScriptは、ブラウザーだけでなく、どこにでもあります。DocumentDBは、JavaScriptを一種の現代のT-SQLとして採用し、データベースエンジン内でJavaScriptロジックのトランザクション実行をネイティブにサポートします。DocumentDBは、ストアドプロシージャとトリガーの観点から、コレクションに対してJavaScriptベースのアプリケーションロジックを直接実行するためのプログラミングモデルを提供します。

簡単なストアドプロシージャを作成する例を見てみましょう。手順は次のとおりです-

Step 1 −新しいコンソールアプリケーションを作成します。

Step 2−NuGetから.NETSDKを追加します。ここでは.NETSDKを使用しています。つまり、ストアドプロシージャを作成、実行、削除するためのC#コードを記述しますが、ストアドプロシージャ自体はJavaScriptで記述されます。

Step 3 −ソリューションエクスプローラーでプロジェクトを右クリックします。

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を使用して定義オブジェクトを作成してから、でCreateメソッドの1つを呼び出します。 DocumentClientオブジェクト。ストアドプロシージャの場合、定義には、サーバーに出荷するIDと実際のJavaScriptコードが含まれます。

Step 7 −電話 File.ReadAllText JSファイルからストアドプロシージャコードを抽出します。

Step 8 −ストアドプロシージャコードを定義オブジェクトのbodyプロパティに割り当てます。

DocumentDBに関する限り、ここで指定するIDは、JavaScript関数の実際の名前に関係なく、定義でストアドプロシージャの名前です。

それでも、ストアドプロシージャやその他のサーバー側オブジェクトを作成するときは、JavaScript関数に名前を付け、それらの関数名がDocumentDBの定義で設定したIDと一致するようにすることをお勧めします。

Step 9 −電話 CreateStoredProcedureAsync、渡す SelfLink のために MyCollectionコレクションとストアドプロシージャの定義。これにより、ストアドプロシージャが作成され、ResourceId そのDocumentDBがそれに割り当てました。

Step 10 −ストアドプロシージャを呼び出します。 ExecuteStoredProcedureAsyncストアドプロシージャによって返される値の期待されるデータ型に設定した型パラメータを取ります。動的オブジェクトを返す場合は、オブジェクトとして簡単に指定できます。これは、実行時にプロパティがバインドされるオブジェクトです。

この例では、ストアドプロシージャが文字列を返すだけであることがわかっているため、次のように呼び出します。 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へようこそ!」があります。ストアドプロシージャによって返されます。