DocumentDB教程
DocumentDB SQL

DocumentDB 插入文档

在本章中,我们将开始处理集合中的实际文档。可以使用 Azure 门户或 .Net SDK 创建文档。

使用 Azure 门户创建文档

让我们看看以下将文档添加到您的集合的步骤。
步骤 1-在 myfirstdb 中添加新的 S1 定价层集合系列。
插入文档
步骤 2-选择 Families 集合并单击"创建文档"选项以打开"新建文档"刀片。
家庭收藏
这只是一个简单的文本编辑器,可让您为新文档键入任何 JSON。
简单文本编辑器
第 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。 id 值始终是必需的,并且它在同一集合中的所有其他文档中必须是唯一的。如果您忽略它,则 DocumentDB 会使用 GUID 或全局唯一标识符为您自动生成一个。
id 始终是字符串,不能是数字、日期、布尔值或其他对象,并且不能超过 255 个字符。
还要注意文档的层次结构,它有一些顶级属性,比如所需的 id,以及 lastName 和 isRegistered,但它也有嵌套的属性。
例如,parents 属性作为方括号表示的 JSON 数组提供。我们还有另一个子数组,尽管在这个例子中数组中只有一个子数组。
第 4 步-单击"保存"按钮保存文档,我们已经创建了第一个文档。
如您所见,我们的 JSON 应用了漂亮的格式,它将每个属性分解成一行,并用空格缩进以传达每个属性的嵌套级别。
保存文档
门户包含一个文档浏览器,所以现在让我们使用它来检索我们刚刚创建的文档。
检索文档
步骤 5-选择一个数据库和数据库中的任何集合以查看该集合中的文档。我们目前只有一个名为 myfirstdb 的数据库和一个名为 Families 的集合,两者都已在此处的下拉列表中预先选择。
选择数据库
默认情况下,文档资源管理器显示集合中未过滤的文档列表,但您也可以按 ID 搜索任何特定文档或基于对部分 ID 的通配符搜索来搜索多个文档。
到目前为止,我们的集合中只有一个文档,我们在下面的屏幕中看到了它的 ID,AndersonFamily。
步骤 6-单击 ID 查看文档。
点击ID

使用 .NET SDK 创建文档

如您所知,文档只是另一种类型的资源,并且您已经熟悉如何使用 SDK 处理资源。
文档和其他资源之间的一大区别当然是它们没有架构。 因此有很多选择。当然,您可以只处理 JSON 对象图甚至 JSON 文本的原始字符串,但您也可以使用动态对象,让您在运行时绑定到属性,而无需在编译时定义类。 您还可以使用真正的 C# 对象或实体,它们可能是您的业务领域类。
让我们开始使用 .Net SDK 创建文档。以下是步骤。
步骤 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); 
   } 
}
步骤 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。我们返回一个带有资源属性的响应,在本例中,它表示具有系统生成属性的新文档。
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 为我们为新文档生成了这个。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4