繁体   English   中英

如何更新Dynamo DB中的项目集合?

[英]How to update collections of items in 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'

我不是Python开发人员,但是您要使用的API是UpdateItem。

如果属性“ comment_ids”的数据类型为Set:

{
    "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" }
    }
}

请记住,Set和Lists 文档之间的区别:

集合集合只能是一种标量类型不支持空集合不保留集合内的顺序每个值都必须唯一

列表列表类型属性可以存储值的有序集合。 列表用方括号括起来:[...]

列表类似于JSON数组。 对可以存储在列表元素中的数据类型没有任何限制,并且列表元素中的元素不必具有相同的类型。

相应地使用运算符或函数将其追加到列表或集合。

  • 运算符ADD-如果数据类型为SET(即SS)
  • 函数list_append如果数据类型为LIST(即L)

追加到列表:-

1)定义列表并在ExpressionAttributeValues使用它(即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'
    },
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM