📅  最后修改于: 2020-11-28 13:46:11             🧑  作者: Mango
在本章中,我们将使用集合中的实际文档。您可以使用Azure门户或.Net SDK创建文档。
让我们看一下将文档添加到集合中的以下步骤。
步骤1-在myfirstdb中添加新的S1定价系列集合。
步骤2-选择“家庭”集合,然后单击“创建文档”选项以打开“新建文档”刀片。
这只是一个简单的文本编辑器,可让您为新文档键入任何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的通配符搜索来搜索多个文档。
到目前为止,我们的收藏夹中只有一个文档,并且在以下屏幕AndersonFamily上可以看到其ID。
步骤6-单击ID以查看文档。
如您所知,文档只是另一种资源,并且您已经熟悉如何使用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为我们为新文档生成了一个ID。