2016-12-27 29 views
0

我想編寫一個函數來更新dynamodb中給定的參數。node.js將參數傳遞給DynamoDB updateItem方法

例如,在dynamodb表,其中每一個用戶id的關鍵是我喜歡的值

{ "categoryname": "a", "skillState": "a", "skipcount": 1, "userId": "amzn1.ask.account.xxx」 }

我想設置"categoryname": "b"雖然有可能是10-15場這樣所以我不想硬編碼字段名稱。

function (userId,itemToUpdate,itemValue,callback) { 


    var updateExpressionString = "SET #"+itemToUpdate+" =:val1"; 
    var expressionAtt = '#'+itemToUpdate + ''; 

    console.log(updateExpressionString) 
    console.log(expressionAtt) 

    this.dynamodb.updateItem({ 
      TableName: constants.dynamoDBDetailTableName, 
      Key: { 
       userId: { 
        S: userId 
       } 
      }, 
      UpdateExpression: updateExpressionString, 
      ExpressionAttributeNames : { 
        expressionAtt : itemToUpdate 
      }, 
      ExpressionAttributeValues : { 
       ':val1': {'S':itemValue} 
      } 
     }, function (err, data) { 
      if (err) { 
       console.log(err) 
       console.log('Error ') 
      } else if (data.Item === undefined) { 

      }else { 
        console.log(data) 
      } 
    }); 
} 

在ExpressionAttributeNames:

{ValidationException:ExpressionAttributeNames包含無效重點:語法錯誤;鍵:「expressionAtt」

這引發錯誤顯然認爲expressionAtt是關鍵,而它是一個局部變量。

我是新來的node.js,怎麼可以通過局部變量在處理這個對ExpressionAttributeNamesExpressionAttributeValues

回答

1

的一種方法是拉出來對象的updateItem,把它變成自己像變所以:

var item = { 
    TableName: constants.dynamoDBDetailTableName, 
    Key: { 
     userId: { 
      S: userId 
     } 
    }, 
    UpdateExpression: updateExpressionString, 
    ExpressionAttributeNames: {}, 
    ExpressionAttributeValue: { 
     ':val1': {'S': itemValue} 
    } 
}; 

item.ExpressionAttributeNames[expressionAtt] = itemToUpdate; 

this.dynamodb.updateItem(item); 

我相信,這將解決您的問題