node.js AWS dynamicodb updateItem для нескольких значений, которые могут быть или не быть там - PullRequest
0 голосов
/ 18 января 2020

Я использую этот aws -sdk в nodejs для доступа / обновления записей DynamodB.

У меня очень длинный документ, как показано в примере ниже.

UID = 1
sort_key = abc
variable = X
variable2 = y
variable3 = z
.....
variable(n) = n2

Я хочу иметь возможность структурировать и обновлять из https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#update -property

, чтобы он мог определить, нет ли значения для указанной переменной c, которую он выиграл ' t обновить его.

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

Или я правильно предположил, что я Вам нужно создать javascript код, который будет создавать UpdateExpression и ExpressionAttributeValues, когда я обнаружу, что эти конкретные значения c введены?

Если это шаблон, то он немного утомителен, как я понимаю. Вот как это должно быть сделано. Я просто надеялся, что было изящное решение.

Это то, о чем я сейчас думаю. В ответ на комментарий просят идею в виде кода.

'' '

            # Above this a load of if statments checking if the value is null. If not the name of the variable is added to the value listofvariables json
            example of json produced after checking all the keys one by one if they are null.
            var obj = { "variable 1": "test", "variable 2": "test2" };
            UpdateExpression = "set"

            for (const key of Object.keys(obj)) {
                    var addMevar =" " + key + " = :" + key + ","
                    var addMevalue = { key : obj[key] }
                    var UpdateExpression = UpdateExpression.concat(addme)
                    var ExpressionAttributeValues = ExpressionAttributeValues.concat(addMevalue)
            }

            var params = {
              TableName: 'Table',
              Key: { HashKey : 'hashkey' },
              UpdateExpression: UpdateExpression
              ExpressionAttributeValues: ExpressionAttributeValues
            };

' ''

То, что я действительно хочу, это что-то вроде этого.

var params = {
                  TableName: 'Table',
                  Key: { HashKey : 'hashkey' },
                  UpdateExpression: all the value here like usual 'set blablabla =something '
                  ExpressionAttributeValues: {value set to the values in the rest of my code. However some flag that says if null you don't update the value in DB as empty.}
                };

В конечном итоге я знаю, что построение запроса работает. Я просто надеюсь, что кто-то знает о лучшем способе.

1 Ответ

0 голосов
/ 30 января 2020

Единственный способ - поместить в логи c, который строит JSON. Не существует условий и так далее для AWS динамо-фильтров, чтобы узнать или позаботиться о том, является ли что-то нулевым, и не включать его.

...