AWS Lambda: как добавить числа в набор NS в Dynamodb

Проблема

Я попробовал несколько подходов, но не смог выяснить, как добавить числа в набор NS. Это все работает внутри лямбда-функции.

Чего я пытаюсь достичь

Я создаю таблицу DynamodB, в которой различные цвета в шестнадцатеричном формате совпадают с набором идентификаторов. Я оптимизирую таблицу для быстрого чтения и во избежание дублирования, поэтому я хотел бы сохранить набор идентификаторов для каждого гекса.

Как я добавляю элементы в таблицу:

let doc = require('dynamodb-doc');
let dynamo = new doc.DynamoDB();

var object = {
    'TableName': 'Hex',
    'Item': {
        'hex': '#FEFEFE',
        'ids': {
            'NS': [2,3,4]
        }
    }
}

dynamo.putItem(object, callback);
Что приводит к

Затем я пытаюсь добавить больше идентификаторов в набор

С использованиемДокументация по элементам обновления Dynamodb стандарты

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : {"NS": ["5", "6"]}
   },
};

dynamo.updateItem(params, callback);

Это возвращает следующую ошибку, так что Dynamo думает: newIds - это тип карты вместо набора (?)

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: MAP"
Я также попробовал эти альтернативные подходы

Попробуйте 2:

var setTest = new Set([5, 6]);

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : setTest
   },
};

dynamo.updateItem(params, callback);

Ошибка 2 (та же ошибка):

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

Попробуйте 3:

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : { "NS" : { "L" : [ { "N" : "5" }, { "N" : "6" } ] }}
   },
};

dynamo.updateItem(params, callback);

Ошибка 3 (та же ошибка):

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

Попробуйте 4:

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : [5,6]
   },
};

dynamo.updateItem(params, callback);

Ошибка 4 (похожая ошибка, но Dynamo думает, что я добавляю список на этот раз)

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: LIST"
Переполнение стека / Github Вопросы, которые я пробовал

https://stackoverflow.com/a/37585600/4975772 (Я добавляю в набор, а не список)

https://stackoverflow.com/a/37143879/4975772 (Я использую javascript, а не python, но мне нужна та же вещь, только другой синтаксис)

https://github.com/awslabs/dynamodb-document-js-sdk/issues/40#issuecomment-123003444 (Мне нужно сделать именно это, но я не использую Dynamodb-Document-JS-SDK, я использую AWS Lambda

Ответы на вопрос(3)

Ваш ответ на вопрос