2017-10-12 61 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' 
    }, 
)