Добавить номер в элемент списка с помощью DynamoDB - PullRequest
0 голосов
/ 29 октября 2018

Это структура таблицы DynamoDB, над которой я работаю:

{
  "userId": "99999999-9999-9999-9999-999999999999",
  "userProfile": {
    "email": "myemail@gmail.com",
    "firstName": "1234124",
    "lastName": "123423",
  },
  "masterCards": [  
    {
      "cardId": 101000000000001,
      "cardImage": "logo.png",
      "cardName": "VipCard1",
      "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8475674567"
    },
    {
      "cardId": 102000000000002,
      "cardImage": "logo.png",
      "cardName": "VipCard2",
      "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8183454345"
    },
    {
      "cardId": 103000000000003,
      "cardImage": "logo.png",
      "cardName": "VipCard3",
      "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8184345345"
    }
  ],

}

Я пытаюсь увеличить поле cardId на единицу для первого элемента списка с помощью этой лямбда-функции:

const dynamoDB = new AWS.DynamoDB({region: 'eu-central-1', apiVersion:'2012-08-10'});
const counterId="99999999-9999-9999-9999-999999999999"

        const params = {
                TableName:"FidelityCardsUsers",
                Key: {"userId":{"S":counterId}},
                UpdateExpression:"ADD #masterCards[0].#cardId :increment",
                ExpressionAttributeNames:{
                    "#masterCards": "masterCards",
                    "#cardId": "cardId"
                },
                ExpressionAttributeValues:{":increment": {"N": "1"}}
            }

        dynamoDB.updateItem(params, function(err, data) {

                        if (err) {
                            console.log('error getting counter from DynamDB: ',err)
                            callback(err);
                        } else {
                            callback(null,data)

                          }

  })  

В ответ я получаю только новый атрибут верхнего уровня с именем "mastercards[0].cardId[0]" с номером значения, установленным в 1.

Ответы [ 2 ]

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

Читая документ здесь , кажется, что:

действие ADD можно использовать только для атрибутов верхнего уровня, а не для вложенных атрибуты.

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

Я попытался увеличить В массиве, и он отлично работает с AWS.DynamoDB.DocumentClient()

Пример:

var AWS = require ("aws-sdk");var docClient = new AWS.DynamoDB.DocumentClient ();

let params = {
  TableName:'tableName',
  Key: {
    'venueId': 'VENUE_002'
  },
  UpdateExpression: "ADD #walk.#coordinates[0] :increment",
  ExpressionAttributeNames: {
    '#walk': 'walk',
    '#coordinates': 'coordinates'
  },
  ExpressionAttributeValues: {
    ':increment': 1 // This is from the client
  },
  ReturnValues: 'UPDATED_NEW'
};
docClient.update(params, function (err, data) {
  if (err) {
    console.log('failure:updateShuttleDirection:failed');
    console.log(err);
  } else {
    console.log('success:updateShuttleDirection:complete');
    console.log(data);
  }
});

Пример данных:

"walk": {
      "coordinates": [
       10,
       20
      ],
      "type": "Point"
    },

Я попытался увеличить с 10 до 11, и он отлично работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...