DocumentDB - Chèn tài liệu
Trong chương này, chúng ta sẽ làm việc với các tài liệu thực tế trong một bộ sưu tập. Bạn có thể tạo tài liệu bằng cổng Azure hoặc .Net SDK.
Tạo tài liệu với Azure Portal
Hãy cùng xem các bước sau để thêm tài liệu vào bộ sưu tập của bạn.
Step 1 - Thêm bộ sưu tập mới Các họ của bậc định giá S1 trong myfirstdb.
Step 2 - Chọn bộ sưu tập Gia đình và nhấp vào tùy chọn Tạo Tài liệu để mở thanh Tài liệu Mới.
Đây chỉ là một trình soạn thảo văn bản đơn giản cho phép bạn nhập bất kỳ JSON nào cho một tài liệu mới.
Step 3 - Vì đây là mục nhập dữ liệu thô, chúng ta hãy nhập tài liệu đầu tiên của chúng ta.
{
"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
}
Khi bạn nhập tài liệu trên, bạn sẽ thấy màn hình sau.
Lưu ý rằng chúng tôi đã cung cấp một id cho tài liệu. Giá trị id luôn là bắt buộc và nó phải là duy nhất trên tất cả các tài liệu khác trong cùng một bộ sưu tập. Khi bạn bỏ nó ra thì DocumentDB sẽ tự động tạo một mã cho bạn bằng cách sử dụng GUID hoặc Mã nhận dạng duy nhất trên toàn cầu.
Id luôn là một chuỗi và nó không thể là một số, ngày tháng, Boolean hoặc một đối tượng khác và nó không được dài hơn 255 ký tự.
Cũng lưu ý cấu trúc phân cấp của tài liệu có một vài thuộc tính cấp cao nhất như id bắt buộc, cũng như lastName và isRegistered, nhưng nó cũng có các thuộc tính lồng nhau.
Ví dụ: thuộc tính cha mẹ được cung cấp dưới dạng mảng JSON như được biểu thị bằng dấu ngoặc vuông. Chúng tôi cũng có một mảng khác cho trẻ em, mặc dù chỉ có một mảng con trong mảng trong ví dụ này.
Step 4 - Nhấp vào nút 'Lưu' để lưu tài liệu và chúng tôi đã tạo tài liệu đầu tiên của mình.
Như bạn có thể thấy rằng định dạng đẹp đã được áp dụng cho JSON của chúng tôi, định dạng này chia nhỏ mọi thuộc tính trên dòng riêng của nó được thụt lề với khoảng trắng để truyền tải mức lồng ghép của từng thuộc tính.
Cổng bao gồm một Trình khám phá Tài liệu, vì vậy hãy sử dụng nó ngay bây giờ để truy xuất tài liệu mà chúng tôi vừa tạo.
Step 5- Chọn một cơ sở dữ liệu và bất kỳ bộ sưu tập nào trong cơ sở dữ liệu để xem các tài liệu trong bộ sưu tập đó. Chúng tôi hiện chỉ có một cơ sở dữ liệu có tên myfirstdb với một bộ sưu tập được gọi là Gia đình, cả hai đều đã được chọn trước ở đây trong trình đơn thả xuống.
Theo mặc định, Trình khám phá tài liệu hiển thị danh sách tài liệu chưa được lọc trong bộ sưu tập, nhưng bạn cũng có thể tìm kiếm bất kỳ tài liệu cụ thể nào theo ID hoặc nhiều tài liệu dựa trên tìm kiếm theo ký tự đại diện của một phần ID.
Chúng tôi chỉ có một tài liệu trong bộ sưu tập của mình cho đến nay và chúng tôi thấy ID của nó trên màn hình sau, AndersonFamily.
Step 6 - Bấm vào ID để xem tài liệu.
Tạo tài liệu với .NET SDK
Như bạn biết rằng tài liệu chỉ là một loại tài nguyên khác và bạn đã làm quen với cách xử lý tài nguyên bằng SDK.
Một sự khác biệt lớn giữa tài liệu và các tài nguyên khác là tất nhiên, chúng không có giản đồ.
Vì vậy, có rất nhiều lựa chọn. Đương nhiên, bạn có thể chỉ làm việc với đồ thị đối tượng JSON hoặc thậm chí các chuỗi thô của văn bản JSON, nhưng bạn cũng có thể sử dụng các đối tượng động cho phép bạn liên kết với các thuộc tính trong thời gian chạy mà không cần xác định lớp tại thời điểm biên dịch.
Bạn cũng có thể làm việc với các đối tượng C # thực hoặc các Đối tượng như chúng được gọi, có thể là các lớp miền doanh nghiệp của bạn.
Hãy bắt đầu tạo tài liệu bằng .Net SDK. Sau đây là các bước.
Step 1 - Khởi tạo DocumentClient sau đó chúng tôi sẽ truy vấn cơ sở dữ liệu myfirstdb và sau đó truy vấn bộ sưu tập MyCollection, chúng tôi lưu trữ trong bộ sưu tập biến riêng này để nó có thể truy cập được trong toàn bộ lớp.
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);
}
}
Step 2 - Tạo một số tài liệu trong tác vụ 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();
}
Tài liệu đầu tiên sẽ được tạo từ đối tượng động này. Điều này có thể trông giống như JSON, nhưng tất nhiên là không. Đây là mã C # và chúng tôi đang tạo một đối tượng .NET thực, nhưng không có định nghĩa lớp. Thay vào đó, các thuộc tính được suy ra từ cách khởi tạo đối tượng.
Lưu ý rằng chúng tôi chưa cung cấp thuộc tính Id cho tài liệu này.
Bây giờ chúng ta hãy xem xét CreateDocument. Nó trông giống như mẫu mà chúng ta đã thấy để tạo cơ sở dữ liệu và bộ sưu tập.
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;
}
Step 3- Lần này chúng tôi gọi CreateDocumentAsync chỉ định SelfLink của bộ sưu tập mà chúng tôi muốn thêm tài liệu vào. Chúng tôi nhận được phản hồi có thuộc tính tài nguyên, trong trường hợp này, đại diện cho tài liệu mới với các thuộc tính do hệ thống tạo ra.
Đối tượng Document là một lớp được xác định trong SDK kế thừa từ tài nguyên và do đó, nó có tất cả các thuộc tính tài nguyên chung, nhưng nó cũng bao gồm các thuộc tính động xác định chính tài liệu không có lược đồ.
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();
}
Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ nhận được kết quả sau.
**** 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
Như bạn có thể thấy, chúng tôi chưa cung cấp Id, tuy nhiên DocumentDB đã tạo Id này cho chúng tôi cho tài liệu mới.