2016-06-19 11 views
1

私は新しいプロジェクトでDynamodbを使用しようとしています。私は非常に混乱していると言わなければなりません。AWS DynamoDbテーブルのクエリ

私は、それが一意である必要があるので、タイムスタンプとして設定しているIDというハッシュキーで新しいテーブルをセットアップしました。

だから私のテーブルは大丈夫である。このように見えるし始めラムダ

var tableName = "TrackerTable"; 
    var datetime = new Date().getTime().toString(); 
    var putData = { 
     "TableName": tableName, 
     "Item": { 
      "ID" : { 
       "N": datetime 
      }, 
      "TrackIt": { 
       "S": event.trackit 
      }, 
      "Latitude": { 
       "N": event.lat 
      }, 
      "Longitude": { 
       "N": event.lon 
      }, 
      "Time": { 
       "N": datetime 
      } 
     } 
    } 
    dynamoDB.putItem(putData, function(err, data) { 
     if (err) { 
      context.fail('ERROR: Dynamo failed: ' + err); 
     } else { 
      console.log('Dynamo Success: ' + JSON.stringify(data, null, ' ')); 
      context.succeed('SUCCESS'); 
     } 
    }); 

に従うように私はその後、私のデータを挿入しています。 enter image description here 私はtrackit列に基づいて私の結果を返すためにラムダを使用しようとしていますか?

私は以下のコードを持っています。

var tableName = "TrackerTable"; 
    var datetime = new Date().getTime().toString(); 

    var queryData = { 
     "TableName": tableName, 
     "ConsistentRead": true, 
     "KeyConditionExpression": "trackit = :val", 
     "ExpressionAttributeValues": {":val": {"S": "05LUGFr7494"}} 
    }; 
    dynamoDB.query(queryData, function(err, data) { 
     if (err) { 
      context.fail('ERROR: Dynamo failed: ' + err); 
     }else{ 
      console.log('Dynamo Success: ' + JSON.stringify(data, null, ' ')); 
      context.done(null, data.Items); 
     } 
    }); 

このエラーが発生します。

{ 
    "errorMessage": "ERROR: Dynamo failed: ValidationException: Query condition missed key schema element: ID" 
} 

どのように私は値が1つのみ値を返すので、ID値を追加できないすべてのtrackit値をクエリできますか?

非常に混乱しています。

答えて

1

テーブルの設定方法は、クエリ[1]の代わりにここでスキャンする必要があると思います。これが頻繁に実行され、クエリを実行できるようにする操作である場合は、trackitプロパティをセカンダリインデックスの1つとして追加する必要があります。

[1] http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

+0

はい。これにはスキャンが必要です。もう1つのオプションは、trackitにグローバルな2次インデックスを定義することです。 – Shibashis