2017-03-23 7 views
3

node.jsのLambda関数をdynamodBからgetitemsに書き出しています。表はemo_IdがPartitionキーである従業員です。以下は、私が書いているコードスニペットです:DynamoBのGet操作の必須キー 'Key in params'が見つかりません

var table = "Employee_Test"; 
var emp_Id=event.emp_Id; 
var emp_Name=event.emp_Name; 
var params = { 
TableName: table, 
    KeyConditionExpression: "#eId = :Id", 
     ExpressionAttributeNames:{ 
      "#eId": "emp_Id" 
     }, 
     ExpressionAttributeValues: { 
      ":Id":emp_Id 
     }} 

を私は取得していますエラーは次のとおりです。 「メッセージ」:「のparamsで必要なキー 『キー』の欠落」、 「コード」:「MissingRequiredParameter」、

エラーの解決方法は次のとおりです。 キー:{ "emp_Id":emp_Id、 }をコードに追加してください。しかし、特定の日付の後に参加した従業員に照会する必要がある場合、emp_Idをパラメーターとして指定することはできません。

AWSのリリースノートでは、パラメータの検証を無効にすることができました。 https://aws.amazon.com/releasenotes/6967335344676381私はこれを試しましたが、これも動作しません。

誰か助けてもらえますか?

おかげ Shwetaさん

+0

サービスレベルでグローバルレベル(または)でパラメータの検証をfalseに設定しようとしましたか? –

+0

あなたの 'aws.config'もここに投稿できますか? –

+0

@DavidRこんにちはDavid、これは設定です: var AWS = require( 'aws-sdk'); var dynamoDBConfiguration = { "accessKeyId": ""、 \t "secretAccessKey": ""、 "region": "us-west-2" }; AWS.config.update(dynamoDBConfiguration); var dynamodb =新しいAWS.DynamoDB({apiVersion: '2012-08-10'}); var dynamodb1 =新しいAWS.dynamodb({paramValidation:false}); –

答えて

0

は、開始日で検索を有効にするために、あなたのテーブルにグローバルセカンダリインデックスを追加します。まず、アイテム作成コード(PutItem)を変更して、joinYearMonth = 201612のように、従業員が参加した月と年を表す属性を追加します。次に、テーブルをスキャンして、この属性をまだ持っていないアイテムを見つけて追加します。第3に、partitionYearMearthのパーティション・キーとjoinTimestampのソート・キーを使用してグローバル・セカンダリ索引を作成します。このようにして、参加した人を見つけるために必要な年月を問わず、GSI上で照会要求を発行することができます。

2

2次インデックスを照会するときに同じエラーが発生しました。私が間違ったAPIを使用していたことがわかります。 getItemとQueryの間で混乱します。

関連する問題