2016-09-20 5 views
0

nodejs expressアプリケーションでdynamodbを使用していて、空のリストだけのフィールドを持つ特定のテーブルがあり、リストに文字列を追加したい。dynamodbテーブルのリストに文字列を追加する

テーブル名は「dev_entrants」とここでは、テーブルの一例です。だから私はポスト要求して、急行を通るルートにそれを受け取り、それが後に型チェックを行う機能に来る

---------------------------------------- 
primary Key   Sort Key  
eventID   | eventType | entrants 
---------------------------------------- 
Qual-919-w5wm1xhnw | Qual  | [] 

---------------------------------------- 

そして私は私のテーブルにコンテンツを追加しようとするものすべて:

import AWS from 'aws-sdk'; 

const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-west-1'}); 

const db = { 
    docClient 
}; 

... 

const entrantsParams = { 
    'TableName' : 'dev_entrants', 
    'Key': { 
     'eventID' : 'Qual-919-w5wm1xhnw', 
    }, 
    'UpdateExpression' : "SET #attrName = list_append(#attrName, :attrValue)", 
    'ExpressionAttributeNames' : { 
     '#attrName' : 'entrants' 
    }, 
    'ExpressionAttributeValues' : { 
     ':attrValue' : ['joe'], 
    } 
    }; 

    const updateEntrantsPromise = db.docClient.update(entrantsParams).promise(); 

(この例の目的のために、私はそれらが表す文字列で変数を置き換えている)

私は6時間かそこらで別のドキュメントを読んでいるだけでなく、スタックオーバーフローで答えを見つけようとしています。

現在のエラーは、提供されたキー要素がスキーマと一致しないことです。 attrValueのまわりで角括弧を削除すると、誤ったオペランドタイプが返されます。テーブルからキーがコピーされて貼り付けられていることが分かります。また、私は接続が正常に動作するように、別の関数からテーブルに物事を追加しています。誰も助けてくれますか?

答えて

2

テーブルスキーマにソートキーがあるため、オブジェクトにeventTypeを含める必要があります。テーブルにソート/パーティションキーがある場合は、それをプライマリキーとともに含める必要があります。次のように試してみてください:

const entrantsParams = { 
    'TableName' : 'dev_entrants', 
    'Key': { 
    'eventID' : 'Qual-919-w5wm1xhnw', 
    'eventType' : 'Qual' 
    }, 
    'UpdateExpression' : "SET #attrName = list_append(if_not_exists(#attrName, :empty_list), :attrValue)", 
    'ExpressionAttributeNames' : { 
    '#attrName' : 'entrants' 
    }, 
    'ExpressionAttributeValues' : { 
    ':attrValue' : ['joe'], 
    ':empty_list': [] 
    } 
}; 
+0

ありがとうございました!私はドキュメントを見ていて、これについてのメモを見たことはありませんでした。 if_not_existsを使って別のアップデートで私の次の問題を実際に解決したので、これは実際には素晴らしいことでした。 – Pljeskavica

関連する問題