Подтвердить что ты не робот

Как удалить из списка карт DynamoDB список по значению атрибута Map в указанном списке?

У меня есть следующий пример списка:

{
  "favorites": [
    {
      "createdAt": 1448998673852,
      "entityId": "558da3de395b1aee2d6b7d2b",
      "type": "media"
    },
    {
      "createdAt": 1448998789252,
      "entityId": "558da3de395b1aee2d6b7d83",
      "type": "media"
    },
    {
      "createdAt": 1448998793729,
      "entityId": "558da3de395b1aee2d6b7d99",
      "type": "media"
    },
    {
      "createdAt": 1448998813023,
      "entityId": "558da3de395b1aee2d6b7daf",
      "type": "media"
    }
  ],
  "userId": "2"
}

И я хочу удалить карту с помощью: "entityId": "558da3de395b1aee2d6b7d2b".

Я думаю о запросе UpdateItem, я посмотрел на документацию по выражению REMOVE (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html), но я не могу видеть любые примеры, кроме удаления элементов из списка по значению индекса....

4b9b3361

Ответ 1

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

а. используйте карту вместо списка, теперь вы можете ссылаться на избранное непосредственно в выражении обновления, используя #favorites.#entityId. Если порядок важен, добавьте атрибут заказа к каждой карте. На вашем уровне доступа к данным вы должны будете сделать свои преобразования в/из требуемого типа массива.

{
  "userId": "2",
  "favorites": {
    "558da3de395b1aee2d6b7d2b": {
      "createdAt": 1448998673852,
      "entityId": "558da3de395b1aee2d6b7d2b",
      "type": "media",
    },
    // ... more entities here
  }
}

В. Вместо этого используйте таблицы "один-ко-многим", см. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForItems.html

Ответ 2

Я сделал это раньше в Python, используя библиотеку Boto3, но не в Javascript. У меня есть ссылка на функцию элемента удаления Javascript. Что я сделал в Python, так это то, что я запросил мою таблицу для элемента (ов) и составил список первичных ключей объектов, которые я хотел удалена и называется функцией удаления.

Ответ 3

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

Я не пользователь node.js, но как вы создали объект в первую очередь? Вы вручную создаете строку json? Если так, то не должно быть. Существуют библиотеки для обработки json и упрощения их изменения, а затем получить полученную строку json с изменениями.

Как разобрать JSON с помощью node.js?