AWS SDK使用DynamoDB和putItem不允许我插入而不进行更新

时间:2014-10-24 02:53:46

标签: node.js amazon-web-services aws-sdk

以下是我将项目插入数据库的方法:

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来电是因为promisifiedbluebird。我试过这样做:

{
    "Expected": {
        "UserId": {
            "Exists": false
        }
    }
}

我的putItem电话,但我没有运气。我想要做的就是插入没有现有更新记录的记录

1 个答案:

答案 0 :(得分:2)

来自PutItem API reference

  

要防止新项目替换现有项目,请使用   包含attribute_not_exists函数的条件表达式   使用属性的名称作为分区键   表。由于每条记录都必须包含该属性,因此   attribute_not_exists函数只有在没有匹配项时才会成功   存在。

首先,确保UserId是表格的PK,然后您可以将ConditionExpressionattribute_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。