Условно обновите атрибут set и отследите его количество элементов в нем. DynamoDB Node.js - PullRequest
0 голосов
/ 24 октября 2019

Я веду список подписчиков и отслеживаю размер списка одновременно

У меня есть атрибут, который представляет собой набор строк, и другой атрибут, который отслеживает количество элементов в наборе строк. Я делаю это, обновляя оба атрибута одновременно. Как защитник, я хочу, чтобы число увеличивалось только тогда, когда новый элемент еще не существует в наборе. Набор по природе не будет обновляться, если элемент уже находится в нем.

Вот параметры, которые я использую для вызова обновления:

const paramsForUpdatingUserBeingFollowed = {
    TableName: process.env.usersTableName,
    Key: {
      userId: userBeingFollowed
    },
    ConditionExpression: "NOT(contains(isFollowedBy, :userMakingRequest))",
    UpdateExpression:
      "ADD isFollowedBy :userMakingRequest, isFollowedByCount :num",
    ExpressionAttributeValues: {
      ":userMakingRequest":
        dynamoDbLib.docClient.createSet([userMakingRequest]) || null,
      ":num": 1
    },
    ReturnValues: "ALL_NEW"
  };

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

1 Ответ

0 голосов
/ 24 октября 2019

Второй аргумент аргумента содержит всегда строку!

Я проходил в SET, отсюда и непредсказуемое поведение.

Эти параметры задают поведение, которое я ищу:

const paramsForUpdatingUserBeingFollowed = {
    TableName: process.env.usersTableName,
    Key: {
      userId: userBeingFollowed
    },
    ConditionExpression: "NOT(contains(isFollowedBy, :userMakingRequestStr))",
    UpdateExpression:
      "ADD isFollowedBy :userMakingRequest, isFollowedByCount :num",
    ExpressionAttributeValues: {
      ":userMakingRequest":
        dynamoDbLib.docClient.createSet([userMakingRequest]) || null,
      ":userMakingRequestStr": userMakingRequest || null,
      ":num": 1
    },
    ReturnValues: "ALL_NEW"
  };


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