2016-02-28 52 views
0

我對亞馬遜的api和dynamodb使用Python的boto3。如何在dynamodb中查找列表的索引?

我想存儲喜歡帖子的人的ID。我目前正在追加到該列表,當有人喜歡一個職位(每篇文章都有贊同清單)。 我使用SET likedBy = list_append(likedBy, :v)添加到列表中,當有人喜歡帖子。 例如:

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

但我怎麼從列表時,他們不像再次刪除特定用戶?而且我想確保一個用戶只能只發一次帖子? (確保在likedBy列表中的用戶ID身份唯一

一個解決方案,我能想到的是讓整個列表,檢查列表中有userId,然後找到索引並使用AWS updateexpression REMOVE likedBy[index]刪除。 (我知道這是不正確的方式)

+0

什麼是你dynamodb哈希/範圍鍵? –

+0

散列鍵是postId,我沒有範圍鍵。我可以使用postId訪問likedBy列表,但我想操縱帶內部嵌套元素的列表項 – kishorer747

回答

1

你不需要使用列表索引。

你的表方案應該是:

hash_key=post_id 
range_key=user_id 

現在,這將允許您:

  1. 讓所有喜歡(user_ids)屬於文章ID
  2. 強制唯一性。 (只有一個記錄POST_ID - USER_ID)
  3. 刪除POST_ID屬於user_id說明
+0

我無法將user_id作爲範圍鍵,因爲單個用戶可以創建多個帖子。我想存儲喜歡在列表中發佈信息的人的列表(這將是該信息的屬性) – kishorer747

+1

爲什麼你不能將user_id作爲範圍鍵?即使用戶可以創建多個帖子?如果你需要一個喜歡帖子的人的列表,那麼你可以添加全局二級索引(hash:user_id,range:post_id)。這正是dynamodb的力量,你不需要在應用程序級別使用它。它可以讓你也可以使用分頁,如果你需要。 –

+0

是的,我明白你的觀點。但我也有評論和分享。所以你建議有3張桌子來維護喜歡,分享和評論(看起來不錯,但如果有很多帖子和很多喜歡的話)或者1張桌子,用於喜歡,分享和評論的嵌套元素(唯一性將是一個概率和刪除) – kishorer747