DynamoDB DocumentClient возвращает набор атрибутов строк (SS) как объект - PullRequest
0 голосов
/ 12 июня 2018

Я новичок в DynamoDB.Когда я читаю данные из таблицы с помощью класса AWS.DynamoDB.DocumentClient, запрос работает, но я получаю результат в неправильном формате.

Запрос:

{
  TableName: "users",
  ExpressionAttributeValues: {
    ":param": event.pathParameters.cityId,
    ":date": moment().tz("Europe/London").format()
  },
  FilterExpression: ":date <= endDate",
  KeyConditionExpression: "cityId = :param"
}

Ожидается:

{ 
  "user": "boris",
  "phones": ["+23xxxxx999", "+23xxxxx777"]
}

Фактически:

{ 
  "user": "boris",
  "phones": {
     "type": "String",
     "values": ["+23xxxxx999", "+23xxxxx777"],
     "wrapperName": "Set"
  }
}

Спасибо!

1 Ответ

0 голосов
/ 19 октября 2018

Функция [ unmarshall ] из [ AWS.DynamoDB.Converter ] является одним из решений, если ваши данные имеют вид, например:

{
    "Attributes": {
      "last_names": {
        "S": "UPDATED last name"
      },
      "names": {
        "S": "I am the name"
      },
      "vehicles": {
        "NS": [
          "877",
          "9801",
          "104"
        ]
      },
      "updatedAt": {
        "S": "2018-10-19T01:55:15.240Z"
      },
      "createdAt": {
        "S": "2018-10-17T11:49:34.822Z"
      }
    }
}

Обратите вниманиеспецификация объекта / карты {} для каждого атрибута, содержащая тип attr.Означает, что вы используете класс [ dynamicodb ], а не [ DynamoDB.DocumentClient ].[ unmarshall ] преобразует запись DynamoDB в объект JavaScript.

Заявлено и поддержано AWS.Ссылкаhttps://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html#unmarshall-property

Тем не менее, я столкнулся с точно таким же случаем использования, что и ваш.Имея только один атрибут, TYPE SET (NS) в моем случае, и мне пришлось сделать это вручную. Следующий фрагмент :

 // Please notice the <setName>, which represents your set attribute name
ddbTransHandler.update(params).promise().then((value) =>{
      value.Attributes[<setName>] = value.Attributes[<setName>].values;
      return value; // or value.Attributes
});

Приветствия, Гамлет

...