- DocumentDB 教程
- DocumentDB - 首页
- DocumentDB - 简介
- DocumentDB - 优势
- DocumentDB - 环境设置
- DocumentDB - 创建账户
- DocumentDB - 连接账户
- DocumentDB - 创建数据库
- DocumentDB - 列出数据库
- DocumentDB - 删除数据库
- DocumentDB - 创建集合
- DocumentDB - 删除集合
- DocumentDB - 插入文档
- DocumentDB - 查询文档
- DocumentDB - 更新文档
- DocumentDB - 删除文档
- DocumentDB - 数据建模
- DocumentDB - 数据类型
- DocumentDB - 限制记录
- DocumentDB - 对记录排序
- DocumentDB - 对记录建立索引
- DocumentDB - 地理空间数据
- DocumentDB - 分区
- DocumentDB - 数据迁移
- DocumentDB - 访问控制
- DocumentDB - 数据可视化
- DocumentDB 有用资源
- DocumentDB - 快速指南
- DocumentDB - 有用资源
- DocumentDB - 讨论
DocumentDB - 插入文档
在本章中,我们将开始在集合中处理实际的文档。您可以使用 Azure 门户或 .Net SDK 创建文档。
使用 Azure 门户创建文档
让我们看一下以下步骤,将文档添加到您的集合。
步骤 1 - 在 myfirstdb 中添加新的 S1 定价层 Families 集合。
步骤 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 数组提供,如方括号所示。我们还有另一个用于 children 的数组,即使在本例中数组中只有一个孩子。
步骤 4 - 单击“保存”按钮保存文档,我们创建了我们的第一个文档。
您可以看到,格式化已应用于我们的 JSON,它将每个属性分解成它自己的行,并使用空格缩进以传达每个属性的嵌套级别。
门户包含一个文档浏览器,因此现在让我们使用它来检索我们刚刚创建的文档。
步骤 5 - 选择数据库和数据库中的任何集合以查看该集合中的文档。我们目前只有一个名为 myfirstdb 的数据库,其中包含一个名为 Families 的集合,这两个集合都已在此处的下拉列表中预先选择。
默认情况下,文档浏览器显示集合中未过滤的文档列表,但您也可以按 ID 搜索任何特定文档,或基于部分 ID 的通配符搜索搜索多个文档。
到目前为止,我们的集合中只有一个文档,我们在以下屏幕上看到它的 ID,AndersonFamily。
步骤 6 - 单击 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。