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