Я пытаюсь добавить строку, установленную в другую строку, установленную внутри элемента, с помощью UpdateItem с Javascript SDK

Мои параметры такие:

        var params = {
            Key: {
                "MyKeyName" : {"S" : "MyKeyValue" }
            },
            TableName: "TableName",
            ExpressionAttributeNames: {
                "#Name1" : "mapName"
            },
            ExpressionAttributeValues: {
                ":Value1" : {"M" : {"StringSetName" : {
                                "SS": ["ValueToAdd"]
                                }
                            }
                }
            },
            UpdateExpression: "ADD #Name1 :Value1"
        };

Теперь это не работает, поскольку ADD работает только с числами и наборами, и этот набор вложен под карту и вызывает эту ошибку:

Неправильный тип операнда для оператора или функции; оператор: ADD, тип операнда: MAP

Я попытался изменить имя атрибута на mapName.M.StringSetName и сделал значение {"SS" : ["ValueToAdd"]. Это не вызвало ошибки, но и не добавило значения в набор.

Любые мысли о том, как это сделать, звучат так, как будто это должно быть что-то близкое к тому, что я пытаюсь.

7
wmfrancia 6 Янв 2017 в 00:44

1 ответ

Лучший ответ

У вас должно получиться это сделать вот так:

var AWS = require('aws-sdk')
var DB = new AWS.DynamoDB.DocumentClient()
var params = {
  TableName: "TableName",
  Key: { MyKeyName: "MyKeyValue" },
  UpdateExpression: "ADD #Name1.StringSetName :Value1",
  ExpressionAttributeNames: { "#Name1" : "mapName" },
  ExpressionAttributeValues: { ":Value1": DB.createSet(["ValueToAdd"]) }
}
DB.update(params)
5
idbehold 9 Янв 2017 в 19:05
Я не вижу метода createSet в DynamoDB SDK, который мы используем. docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB. html Вы используете другой?
 – 
wmfrancia
9 Янв 2017 в 20:47
Это использует DocumentClient: docs.aws. amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/…
 – 
idbehold
9 Янв 2017 в 20:52
Да вот почему. Спасибо.
 – 
wmfrancia
9 Янв 2017 в 21:34