0

Я использую boto3 для Python для api и dynamodb Amazon.Как найти индекс списка в dynamodb?

Я хочу хранить идентификаторы людей, которым понравилось сообщение. В настоящее время я добавляю этот список, когда кому-то нравится сообщение (каждый пост понравился). Я использую SET likedBy = list_append(likedBy, :v), чтобы добавить к списку, когда кому-то нравится сообщение. Ex:

"likedBy" : [ 
    { 
     "on": 1455736397, 
     "userId": 232323 
    }, 
    { 
     "on": 1455736398, 
     "userId": 46 
    }] 

Но как я удалить конкретного пользователя из списка, когда они в отличие от вновь? А также я хочу, чтобы один пользователь мог только писать сообщение только один раз? (Убедитесь, что идентификатор пользователя в списке likedBy является уникальным)

Одно из решений я мог думать о том, чтобы получить весь список и проверить, если список имеет userId, а затем найти индекс и использовать AWS updateexpression REMOVE likedBy[index] удалить. (я знаю, что это не правильный путь)

+0

, что это ваши dynamodb ключи хэш/диапазон? –

+0

хэш-ключ - это postId, и у меня нет ключа диапазона. Я могу получить доступ к списку избранных с помощью postId, но я хочу манипулировать элементами списка с внутренними вложенными элементами. – kishorer747

ответ

1

Вам не нужно использовать индексы списка.

ваша схема таблица должна быть:

hash_key=post_id 
range_key=user_id 

сейчас, это позволит вам:

  1. получить все любит (user_ids) принадлежит к сообщению идентификатор
  2. обеспечения уникальности. (Только одна запись для POST_ID - user_id)
  3. удалить post_id принадлежит user_id
+0

У меня не может быть user_id как ключ диапазона, поскольку один пользователь может создавать несколько сообщений. И я хочу сохранить список людей, которым понравился пост в списке (это будет атрибут для этого сообщения) – kishorer747

+1

Почему у вас нет ключа user_id в качестве ключа диапазона? даже если пользователь может создавать несколько сообщений? если вам нужен список людей, которым понравилось сообщение, вы можете добавить глобальный вторичный индекс (хэш: user_id, range: post_id). это как раз сила dynamodb, вам не нужно использовать ее на уровне приложения. это позволит вам также использовать разбивку на страницы, если вам нужно. –

+0

да, я понял вашу точку зрения. но у меня есть комментарии и акции. Таким образом, вы предлагаете иметь 3 таблицы для поддержки симпатий, акций и комментариев (кажется, хорошо, но что, если есть много сообщений и много похожих) или 1 таблица, с вложенными элементами для симв, акций и комментариев (уникальность будет пробной и удаление) – kishorer747