DocumentDB - 插入文件



在本章中,我們將開始在集合中處理實際的文件。您可以使用 Azure 門戶或 .Net SDK 建立文件。

使用 Azure 門戶建立文件

讓我們看一下以下步驟,將文件新增到您的集合。

步驟 1 - 在 myfirstdb 中新增新的 S1 定價層 Families 集合。

Insert Document

步驟 2 - 選擇 Families 集合,然後單擊“建立文件”選項以開啟“新建文件”邊欄。

Families Collection

這只是一個簡單的文字編輯器,允許您為新文件鍵入任何 JSON。

simple text editor

步驟 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
}

輸入上述文件後,您將看到以下螢幕。

Document

請注意,我們已為文件提供了 id。id 值始終是必需的,並且在同一集合中的所有其他文件中都必須唯一。當您省略它時,DocumentDB 將自動使用 GUID 或全域性唯一識別符號為您生成一個。

id 始終是字串,不能是數字、日期、布林值或其他物件,並且不能超過 255 個字元。

還要注意文件的分層結構,它具有一些頂級屬性,例如必需的 id,以及 lastName 和 isRegistered,但它也具有巢狀屬性。

例如,parents 屬性作為 JSON 陣列提供,如方括號所示。我們還有另一個用於 children 的陣列,即使在本例中陣列中只有一個孩子。

步驟 4 - 單擊“儲存”按鈕儲存文件,我們建立了我們的第一個文件。

您可以看到,格式化已應用於我們的 JSON,它將每個屬性分解成它自己的行,並使用空格縮排以傳達每個屬性的巢狀級別。

Save Document

門戶包含一個文件瀏覽器,因此現在讓我們使用它來檢索我們剛剛建立的文件。

Retrieve Document

步驟 5 - 選擇資料庫和資料庫中的任何集合以檢視該集合中的文件。我們目前只有一個名為 myfirstdb 的資料庫,其中包含一個名為 Families 的集合,這兩個集合都已在此處的下拉列表中預先選擇。

choose a Database

預設情況下,文件瀏覽器顯示集合中未過濾的文件列表,但您也可以按 ID 搜尋任何特定文件,或基於部分 ID 的萬用字元搜尋搜尋多個文件。

到目前為止,我們的集合中只有一個文件,我們在以下螢幕上看到它的 ID,AndersonFamily。

步驟 6 - 單擊 ID 以檢視文件。

Click on ID

使用 .NET SDK 建立文件

如您所知,文件只是另一種型別的資源,您已經熟悉瞭如何使用 SDK 處理資源。

  • 文件與其他資源之間的一個主要區別是,當然,它們是無模式的。

  • 因此有很多選擇。當然,您可以使用 JSON 物件圖甚至 JSON 文字的原始字串,但您也可以使用動態物件,這些物件允許您在執行時繫結到屬性,而無需在編譯時定義類。

  • 您還可以使用真實的 C# 物件或稱為實體的物件,這些物件可能是您的業務域類。

讓我們開始使用 .Net SDK 建立文件。以下是步驟。

步驟 1 - 例項化 DocumentClient,然後我們將查詢 myfirstdb 資料庫,然後查詢 MyCollection 集合,我們將其儲存在此私有變數 collection 中,以便在整個類中都可以訪問它。

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

步驟 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; 
}

步驟 3 - 這次我們呼叫 CreateDocumentAsync 並指定我們要將文件新增到其中的集合的 SelfLink。我們得到一個包含 resource 屬性的響應,在這種情況下,它表示具有其系統生成屬性的新文件。

Document 物件是 SDK 中一個定義的類,它繼承自 resource,因此它具有所有通用的資源屬性,但它還包括定義無模式文件本身的動態屬性。

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 為我們為新文件生成了此 Id。

廣告