2016-12-27 14 views
0

Я хочу написать функцию, которая обновляет данный параметр в dynamodb.node.js, передающий параметр DynamoDB updateItem метод

Например, в таблице dynamodb, где каждый идентификатор пользователя является ключом у меня есть ценности, как

{ "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 содержит недопустимый ключ: ошибка синтаксиса; key: "expressionAtt"

Эта ошибка, очевидно, предполагает, что expressionAtt является ключом, хотя это локальная переменная.

Я новичок в Node.js, как можно передать локальную переменную в к ExpressionAttributeNames и ExpressionAttributeValues

ответ

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); 

Я считаю, что будет исправить вашу проблему