如何更新dynamo db中的项目集合?

时间:2017-10-12 11:55:07

标签: python amazon-dynamodb

我在发电机中有以下表格:

var result = _.chain(data)
    .map( company => [_.omit(company, 'Employees'), company.Employees])
    .flatten()
    .value();

新评论到达时(如id | comment_ids | updated_at 1 [12, 123] '2017-09-09' )如何更新相应的11以获取:

id

2 个答案:

答案 0 :(得分: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数组。可以存储在list元素中的数据类型没有限制,list元素中的元素不必是同一类型。

答案 1 :(得分:1)

相应地使用运算符或函数来附加到列表或设置。

  • 操作员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'
    },
)