Вставить в список, если он не содержит элемент с указанной картой - PullRequest
0 голосов
/ 22 мая 2019

Я хочу добавить в свой список, если он не содержит элемент с указанной картой.

Допустим, база данных выглядит следующим образом:

{
   activities: [
     {
       name: {
         fr: 'ex',
         en: 'ex'
       }
     }, ...
   ]
}

Я хочу добавить в список действий, только если нет действий с таким именем. В настоящее время вот что я получил:

async create(appId, name) {
  const newActivity = { id: uuid(), name };

  const params = {
    ConditionExpression: 'not contains (activities, :activityName)',
    ExpressionAttributeValues: { ':activity': [newActivity], ':activityName': { name }, ':empty_list': [] },
    Key: { id: appId },
    TableName: this.tableName,
    UpdateExpression: 'SET activities = list_append(if_not_exists(activities, :empty_list), :activity)',
    };

  return new Promise((resolve, reject) => {
    this.client.update(params, (err) => {
      if (err) {
        reject(err);
      } else {
        resolve(newActivity);
      }
    });
  });
}

При этом обновление работает каждый раз, и новое действие добавляется в список, даже если функция name, которую я отправляю, выглядит так:

{
  fr: 'ex',
  en: 'ex'
}

Есть ли другой способ сделать это или я делаю что-то не так? Эта вещь не выдает никакой ошибки, она просто работает.

...