Dynamodb UpdateExpression добавление нового объекта карты в список существующего элемента - PullRequest
0 голосов
/ 11 декабря 2018

У меня в настоящее время есть атрибут Список в моей таблице DynamodB:

 name: "Test User"
 recommendations: []

Я бы хотел добавить новый элемент в атрибут рекомендаций, используя UpdateExpression

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid, // WHERE uuid is event.uuid
    },
    UpdateExpression: "SET #recommendations = :recommendation",
    ExpressionAttributeNames: {
      "#recommendations": "recommendations",
    },
    ExpressionAttributeValues: {
      ":recommendation": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation
      }]
    },
    ReturnValues:"UPDATE_NEW"
  };

  dynamodb.update(params, function(err, data) { }

Мне удалось добавить карту объектов в список рекомендаций, но когда я хочу добавить другую, она заменит объект в списке рекомендаций.

Я также попытался использовать ADD в UpdateExpression

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid,
    },
    UpdateExpression: "ADD #recommendations :recommendation",
    ExpressionAttributeNames: {
      "#recommendations": "recommendations",
    },
    ExpressionAttributeValues: {
      ":recommendation": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation, 
      }]
    },
    ReturnValues:"ALL_NEW"
  };

   dynamodb.update(params, function(err, data) { }

, но я получаю ошибку

"Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: LIST",

1 Ответ

0 голосов
/ 11 декабря 2018

Хорошо, я уже понял, как добавить объект к существующему атрибуту карты элемента.Я использовал list_append

, это добавит объект к существующему атрибуту карты

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid,
    },
    UpdateExpression: "SET #attrName = list_append(#attrName, :attrValue)",
    ExpressionAttributeNames: {
      "#attrName": "recommendations",
    },
    ExpressionAttributeValues: {
      ":attrValue": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation
      }]
    },
    ReturnValues:"ALL_NEW"
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...