Documentdb-insert-document
DocumentDB-文書の挿入
この章では、コレクション内の実際のドキュメントを操作します。 Azureポータルまたは.Net SDKを使用してドキュメントを作成できます。
Azure Portalでドキュメントを作成する
コレクションにドキュメントを追加するには、次の手順を見てみましょう。
- ステップ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値は常に必須であり、同じコレクション内の他のすべてのドキュメントで一意である必要があります。 省略すると、GUIDまたはグローバル一意識別子を使用してDocumentDBが自動的に生成します。
idは常に文字列であり、数値、日付、ブール値、または別のオブジェクトにすることはできません。また、255文字を超えることはできません。
また、必要なidのようないくつかのトップレベルプロパティ、lastName、isRegisteredがありますが、ネストされたプロパティもあるドキュメントの階層構造に注目してください。
たとえば、parentsプロパティは、角括弧で示されるJSON配列として提供されます。 この例では、配列に子が1つしかない場合でも、子用の別の配列もあります。
- ステップ4 *-[保存]ボタンをクリックしてドキュメントを保存すると、最初のドキュメントが作成されました。
かなりの書式設定がJSONに適用されていることがわかります。これにより、各プロパティのネストレベルを伝えるために空白でインデントされた独自の行のすべてのプロパティが分割されます。
ポータルにはドキュメントエクスプローラーが含まれているため、ここで作成したドキュメントを取得するために使用します。
- ステップ5 *-データベースとデータベース内のコレクションを選択して、そのコレクション内のドキュメントを表示します。 現在、Familysという1つのコレクションを持つmyfirstdbという名前のデータベースが1つだけあり、両方のドロップダウンリストで事前に選択されています。
デフォルトでは、ドキュメントエクスプローラにはコレクション内のドキュメントのフィルタリングされていないリストが表示されますが、特定のドキュメントをIDで検索したり、部分的なIDのワイルドカード検索に基づいて複数のドキュメントを検索したりすることもできます。
これまでのコレクションにはドキュメントが1つしかなく、そのIDは次の画面AndersonFamilyに表示されます。
- ステップ6 *-IDをクリックしてドキュメントを表示します。
.NET SDKを使用したドキュメントの作成
ドキュメントは別の種類のリソースであり、SDKを使用してリソースを処理する方法に既に慣れていることはご存じでしょう。
- ドキュメントと他のリソースの大きな違いの1つは、もちろん、スキーマが無料であることです。
- したがって、多くのオプションがあります。 当然、JSONオブジェクトグラフまたはJSONテキストの生の文字列だけで作業できますが、コンパイル時にクラスを定義せずに実行時にプロパティにバインドできる動的オブジェクトを使用することもできます。
- また、実際のC#オブジェクト、またはそれらが呼び出されたエンティティ(ビジネスドメインクラス)を操作することもできます。
Net SDKを使用してドキュメントの作成を始めましょう。 手順は次のとおりです。.
- ステップ1 *-DocumentClientをインスタンス化し、myfirstdbデータベースを照会してから、MyCollectionコレクションを照会します。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 *-今回は、ドキュメントを追加するコレクションのSelfLinkを指定してCreateDocumentAsyncを呼び出します。 この場合、システムによって生成されたプロパティを持つ新しいドキュメントを表すリソースプロパティを持つ応答が返されます。
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を生成しました。