web-dev-qa-db-ja.com

DynamoDBを使用してテーブル内のすべてのアイテムを取得する

私は現在Webサービスクラスに所属しており、現在取り組んでいるプロジェクトでは、.NET Coreプラットフォームを使用して、データベースとしてDynamoDBを使用するWeb APIを作成することにしました。

これまでのところ、Dynamoを.NET Coreと連携させるのは少し大変でした。2つを連携させるための記事が多すぎるように思えないためです。現在、特定のテーブルからすべてのアイテムを取得する方法にこだわっています。

私はDynamoのドキュメントを読んでおり、オブジェクト永続性モデルを使用することにしました。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
        services.AddAWSService<IAmazonDynamoDB>();
    }

スタートアップファイルのサービスの設定メソッドにDynamoDBコンテキストを挿入します。次に、このようにコントローラに注入します

    DynamoDBContext context;
    public ValuesController(IAmazonDynamoDB context)
    {
        this.context = new DynamoDBContext(context);
    }

繰り返しますが、私はこれら2つのテクノロジーの専門家ではないので、これを行うより良い方法がある場合はお知らせください。

DynamoDBのドキュメントから入手した、使用している単純なモデルもあります。

[DynamoDBTable("AnimalsInventory")]
public class Item
{
    [DynamoDBHashKey]
    public Guid Id { get; set; }
    [DynamoDBRangeKey]
    public string Type { get; set; }
    public string Name { get; set; }
}

この記事ではこちら

https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/DynamoDBContext.QueryScan.html

query/Scanメソッドを使用してDBからアイテムを取得できると記載されていますが、残念ながらこれらのメソッドは.NET Coreプラットフォームではサポートされていません。 .NET Coreでは、それらはQueryAsyncおよびScanAsyncと呼ばれ、引数なしでメソッドを呼び出すだけで、テーブル内のアイテムを取得するだけだと思いましたが、機能しませんでした。このメソッドは特定のスキャン条件で特に使用されるように見えるため、間違ったメソッドを使用しているかどうか、またはテーブルからすべてのアイテムを取得する方法がないかどうかはわかりません。

7
wjvukasovic

QueryAsyncおよびScanAsyncは、DynamoDB Query および Scan オペレーションにマップされる async-style メソッドにすぎません。

次のようなものを使用して、テーブル内のすべてのアイテムをスキャンできるはずです。

var conditions = new List<ScanCondition>();
// you can add scan conditions, or leave empty
var allDocs = await context.ScanAsync<Item>(conditions).GetRemainingAsync();

スキャンAPI のドキュメントから始めることをお勧めします。クライアントの詳細なしで実際のAPIについて説明します。ページング、フィルター式などについて学習します。次に、async/awaitに慣れていない場合は、それを読んでください。最後にそれらをまとめると、独自のアプリケーションでQueryAsyncとScanAsyncを使用できるようになります。

14
Mike Dinescu