Возможно ли в AWS базе данных динамо называть ключи объекта пунктирными строками? или применить команду (обновить, удалить) к пунктирным строковым ключам? - PullRequest
0 голосов
/ 03 апреля 2020

Мой сценарий - это база данных динамо в aws, у меня есть таблица, содержащая структуру, подобную следующей:

{
  "data": {
    "23fc4fa8-0037-4d09-90be-506eed497a15": {
      "text": "first text"
    },
    "4708f80a-e301-48ab-8351-f598c4300600": {
      "text": "second text"
    }
  },
  "types": "type",
  "order": 3
}

Моя цель - удалить второй текст, который я получаю от клиентов на стороне id 4708f80a-e301-48ab-8351-f598c4300600 поэтому я создаю свой вызов для удаления только этого поля, чтобы получить эти данные после операции удаления:

{
  "data": {
    "23fc4fa8-0037-4d09-90be-506eed497a15": {
      "text": "first text"
    }
  },
  "types": "type",
  "order": 3
}

Это код, который я использую:

  const type = 'type'
  const id = '4708f80a-e301-48ab-8351-f598c4300600'
  const dynamoBd = new AWS.DynamoDB.DocumentClient()

  const params = {
    TableName: DB_TABLE,
    Key: {
      types: type
    },
    UpdateExpression : `REMOVE data.${id}`
  }

  await dynamoDbClient
    .update(params, (error, _) => {
      if (error) {
        console.error(`Error: `, error)
        return
      }
    })
    .promise()

Но я получаю эту ошибку:

Error:  ValidationException: Invalid UpdateExpression: Syntax error; token: "4708", near: ".4708f80a"

Я полагаю, что проблема заключается в том, как строится эта строка 'REMOVE data.${id}', которая проанализировала выглядит следующим образом 'REMOVE data.4708f80a-e301-48ab-8351-f598c4300600 '

Любой Идеи, как решить эту проблему, заранее спасибо всем, кто мог бы помочь мне. Ps. если вы найдете на этом сайте aws документацию, не могли бы вы также опубликовать ее, потому что в настоящее время я не могу ее найти. Еще раз спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Это способ построения const params с поддержкой ExpressionAttributeNames:

. Причина в том, что некоторые ключи или значения могут быть ключевыми словами или содержать специальные символы (например, da sh в пример). Так что ExpressionAttributeNames (для примера) и ExpressionAttributeValues используются для создания замещающих заполнителей ключей и значений.

  const params = {
    TableName: DB_TABLE,
    Key: {
      types: type
    },
    UpdateExpression : `REMOVE #data.#id`,
    ExpressionAttributeNames: {
      '#data': 'data',
      '#id': id
    }
  }
...