开发手册 欢迎您!
软件开发者资料库

DocumentDB - 插入文档

DocumentDB插入文档 - 从简介,优势,环境设置,创建,连接帐户,创建,列表,删除数据库,创建,删除集合,插入,查询,更新,删除文档,数据建模,数据类型,限制,排序等方面学习DocumentDB ,索引记录,地理空间数据,分区,数据迁移,访问控制,可视化数据。

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

使用Azure门户创建文档

让我们看看以下步骤将文档添加到您的收藏中.

第1步 : 在myfirstdb中添加新的集合S1定价层的家族.

插入文档

第2步 : 选择Families集合,然后单击Create Document选项以打开New Document blade.

Families Collection

这只是一个简单的文本编辑器,可以为新文档键入任何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}

当您输入上述文档时,您将看到以下屏幕.

Document

请注意,我们为文档提供了一个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 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为我们为新文档生成了这个.