Как добавить элементы на карту в DynamoDB - PullRequest
0 голосов
/ 10 марта 2020

Я использую AWS.DynamoDB.DocumentClient с nodejs (лямбда-функции на AWS)

У меня есть БД с именем Translations, первичный ключ Term, ключ сортировки Category.

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

{ 
  Term: 'hello_there', 
  Category: 'common_phrases', 
  Translations: {
    en-ca: 'Hello There!'
  } 
}

и хочу обновить Карту переводов, чтобы, возможно, добавить другой язык или просто изменить часть en-ca объекта.

Я пробовал следующее:

let params = {
    TableName: 'Translations',
    Key: {
      Term: 'hello_there',
      Category: 'common_phrases',
    },
    UpdateExpression:
      'SET Translations.#lang = list_append(Translations, :term)',
    ExpressionAttributeValues: {
      ':term': 'french version',
    },
    ExpressionAttributeNames: {
      '#lang': 'fr-ca',
    },
  }

Но я получаю ошибку о неправильном типе операнда.

Я пробовал:

    UpdateExpression:
      'SET Translations.#lang = :term',
    ExpressionAttributeValues: {
      ':term': 'french version',
    },
    ExpressionAttributeNames: {
      '#lang': 'fr-ca',
    },

Но это перезаписывает все содержимое поля Переводы. Это означает, что если бы у меня уже было en-ca, то теперь у меня было бы только fr-ca.

Я тоже это пробовал, но также получал ошибку операнда:

{
  UpdateExpression: 'ADD Translations :term',
  ExpressionAttributeValues: {
    ':term': { 'fr-ff': 'frenchterm' },
},

Любой предложения о том, как добавить / обновить элементы на карте переводов?

1 Ответ

1 голос
/ 10 марта 2020

Ваше SET выражение было близко, попробуйте что-то вроде этого:

    UpdateExpression:
      'SET #trans.#lang = :term',
    ExpressionAttributeValues: {
      ':term': 'french version',
    },
    ExpressionAttributeNames: {
      '#trans': 'Translations`,
      '#lang': 'fr-ca',
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...