2017-10-12 34 views
0

我有發電機如下表:如何更新dynamo db中的項目集合?

id | comment_ids | updated_at 
1  [12, 123] '2017-09-09' 

當新的評論已經到達(如11)如何更新相應的id獲得:

id | comment_ids | updated_at 
1 [12, 123, 11] '2017-09-09' 
+0

comment_ids的dynamodb數據類型是什麼?它是設置還是列出? – notionquest

回答

1

我不是一個Python開發,但是你想使用的API是UpdateItem。

如果屬性「comment_ids」的數據類型是一組:

{ 
    "TableName": "XXX", 
    "Key": { 
     "id": { 
      "N": "1" 
     } 
    }, 
    "UpdateExpression": "ADD #cid :new_cid", 
    "ExpressionAttributeNames": { 
     "#cid": "comment_ids" 
    }, 
    "ExpressionAttributeValues": { 
     ":new_cid": {"N": "11" } 
    } 
} 

如果屬性「comment_ids」的數據類型是一個列表:

{ 
    "TableName": "XXX", 
    "Key": { 
     "id": { 
      "N": "1" 
     } 
    }, 
    "UpdateExpression": "SET #cid = list_append(#cid, :new_cid)", 
    "ExpressionAttributeNames": { 
     "#cid": "comment_ids" 
    }, 
    "ExpressionAttributeValues": { 
     ":new_cid": {"N": "11" } 
    } 
} 

請記住,設置和列表之間的區別docs

集只能是一個標量型的個空集不支持集內 排序不保留 每個值都必須是唯一

列表 列表類型的屬性可以存儲值的有序集合。列表括在方括號中:[...]

列表與JSON數組類似。對於可以存儲在列表元素中的數據類型沒有限制,並且列表元素中的元素不必具有相同的類型。

1

相應地使用操作符或函數來追加到列表或設置。

  • 算ADD - 如果數據類型被設置(即,SS)
  • 功能list_append - 如果數據類型是列表(即L)

追加到列表: -

1)定義列表並使用它在ExpressionAttributeValues(ie idVals)

idVal = [11] 

response = table.update_item(
    Key={ 
     '#id': 1992    
    },  
    UpdateExpression="SET comment_ids = list_append(comment_ids , :idVal)", 
    ExpressionAttributeValues={ 
     ':idVal': idVal 
    }, 
    ExpressionAttributeNames={ 
     '#id' : 'id' 
    }, 
) 

附加到組: -

1)定義集合和在ExpressionAttributeValues使用它(即idVals)

idVals = set([11]) 

response = table.update_item(
    Key={ 
     '#id': 1999    
    }, 
    UpdateExpression="ADD comment_ids :idVal", 
    ExpressionAttributeValues={ 
     ':idVal': idVals 
    }, 
    ExpressionAttributeNames={ 
     '#id' : 'id' 
    }, 
) 
相關問題