2016-09-06 3 views
0


in dynamoDB У меня есть таблица с атрибутами, которые переносятся через дефис. (например, имя)Обновление атрибута в DynamoDB, содержащего дефис или тире (-) в javascript

Теперь я хочу обновить их, используя javascript. Это мой код до сих пор:

//create UpdateExpression and ExpressionAttributeValues 
    let updateExpression = "set "; 
    let expressionAttributeValues ={}; 
    if (e.firstName !== null){ 
     updateExpression = updateExpression + " "+ 'first-name'+" = :f,"; 
     expressionAttributeValues[":f"] = e.firstName; 
    } 

    let table = "tableName"; 
    let bpNumber = e.bpNumber; 
    let params = { 
     TableName: table, 
     Key: { 
      "bpNumber": bpNumber 
     }, 
     UpdateExpression: updateExpression, 
      ExpressionAttributeValues: expressionAttributeValues, 
      ReturnValues:"UPDATED_NEW" 

    }; 

    console.log("Updating the item..."); 
     docClient.update(params, function(err, data) { 
      if (err) { 
       console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); 
      } else { 
       console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2)); 
      } 
     }); 

Однако это бросает мне эту ошибку:

Unable to update item. Error JSON: { 
    "message": "Invalid UpdateExpression: Syntax error; token: \"-\", near: \"first-name\"" 

Есть ли способ обойти это?
Благодарим за помощь :)

ответ

1

При использовании атрибутов, содержащих зарезервированные слова, пробелы или специальные символы, вы должны использовать заполнители. Взгляните на documentation.

В updateExpression вместо first-name вы можете использовать, например, #fn заполнитель, а затем определить ExpressionAttributeNames:

ExpressionAttributeNames: { 
    "#fn":"first-name 
} 
+0

удивительного, это работает. спасибо .... я бы никогда не нашел это в одном документе –

Смежные вопросы