以下是我将项目插入数据库的方法:
DynamoDB.putItemAsync({
"TableName": tblName,
"Item": {
"UserId": { "S": String(obj.user_id) },
"CampaignId": { "N": String(obj.campaign_id) },
"Email": { "S": String(obj.email) },
"CustomActivityNodeId": { "N": String(obj.custom_activity_node_id) }
},
"Expected": {
"UserId": {
"Exists": false
}
}
})
putItemAsync
来电是因为promisified
库bluebird
。我试过这样做:
{
"Expected": {
"UserId": {
"Exists": false
}
}
}
我的putItem
电话,但我没有运气。我想要做的就是插入没有现有更新记录的记录
答案 0 :(得分:2)
要防止新项目替换现有项目,请使用 包含attribute_not_exists函数的条件表达式 使用属性的名称作为分区键 表。由于每条记录都必须包含该属性,因此 attribute_not_exists函数只有在没有匹配项时才会成功 存在。
首先,确保UserId
是表格的PK,然后您可以将ConditionExpression
与attribute_not_exists
一起使用:
DynamoDB.table('users').PutItem({}, {
ConditionExpression: "attribute_not_exists(email)"
}).then((response) => response.json()).then((res) => {
// [LOG] possible bug with time
})
如果之前不存在电子邮件(表格中的我的pk),那将会创建一个项目仅。
PS:我在反应原生中使用了wrapper for dynamodb。