Documentdb-update-document

提供:Dev Guides
移動先:案内検索

DocumentDB-ドキュメントの更新

この章では、ドキュメントを更新する方法を学びます。 Azureポータルを使用すると、ドキュメントエクスプローラーでドキュメントを開き、エディターでテキストファイルのように更新することで、ドキュメントを簡単に更新できます。

ドキュメントの更新

[保存]ボタンをクリックします。 これで、.Net SDKを使用してドキュメントを変更する必要がある場合、それを置き換えることができます。 削除して再作成する必要はありません。面倒なことに加えて、リソースIDも変更します。これは、ドキュメントを変更するだけでは不要です。 .Net SDKを使用してドキュメントを更新するための次の手順を示します。

次のReplaceDocumentsタスクを見てみましょう。isNewプロパティがtrueであるドキュメントを照会しますが、何もないので何も取得しません。 それでは、先ほど追加したドキュメントで、名前がNew Customerで始まるドキュメントを変更しましょう。

  • ステップ1 *-これらのドキュメントにisNewプロパティを追加し、その値をtrueに設定します。
private async static Task ReplaceDocuments(DocumentClient client) {

   Console.WriteLine();
   Console.WriteLine(">>> Replace Documents <<<");
   Console.WriteLine();
   Console.WriteLine("Quering for documents with 'isNew' flag");

   var sql = "SELECT *FROM c WHERE c.isNew = true";
   var documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();

   Console.WriteLine("Documents with 'isNew' flag: {0} ", documents.Count);
   Console.WriteLine();
   Console.WriteLine("Quering for documents to be updated");

   sql = "SELECT* FROM c WHERE STARTSWITH(c.name, 'New Customer') = true";
   documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
   Console.WriteLine("Found {0} documents to be updated", documents.Count);

   foreach (var document in documents) {
      document.isNew = true;
      var result = await client.ReplaceDocumentAsync(document._self, document);
      var updatedDocument = result.Resource;
      Console.WriteLine("Updated document 'isNew' flag: {0}", updatedDocument.isNew);
   }

   Console.WriteLine();
   Console.WriteLine("Quering for documents with 'isNew' flag");

   sql = "SELECT * FROM c WHERE c.isNew = true";
   documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
   Console.WriteLine("Documents with 'isNew' flag: {0}: ", documents.Count);
   Console.WriteLine();
}
  • ステップ2 *-同じSTARTSWITHクエリを使用して更新するドキュメントを取得します。これにより、動的オブジェクトとしてここに戻ってきたドキュメントが得られます。
  • ステップ3 *-isNewプロパティを添付し、各ドキュメントに対してtrueに設定します。
  • ステップ4 *-ReplaceDocumentAsyncを呼び出して、更新されたドキュメントとともにドキュメントのSelfLinkを渡します。

これが機能することを証明するために、isNewがtrueに等しいドキュメントを照会します。 CreateDocumentClientタスクから上記のクエリを呼び出しましょう。

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);
     //QueryDocumentsWithSql(client);
     //await QueryDocumentsWithPaging(client);
     //QueryDocumentsWithLinq(client);
      await ReplaceDocuments(client);
   }

}

上記のコードをコンパイルして実行すると、次の出力が表示されます。

*** *Replace Documents* ***
Quering for documents with 'isNew' flag
Documents with 'isNew' flag: 0
Quering for documents to be updated
Found 2 documents to be updated
Updated document ‘isNew’ flag: True
Updated document ‘isNew’ flag: True
Quering for documents with 'isNew' flag
Documents with 'isNew' flag: 2