DynamoDB 使用条件表达式而不是键放置项目

DyamoDB put item with ConditionExpression instead of key

由于email不是主键,所以需要根据email字段判断一条记录的唯一性。这是行不通的。用户得到保存。 DynamoDB 是否不允许在另一个字段而不是键上使用 conditionExpression?

    const params = {
            TableName: process.env.tableName,
            Item: user.toItem(),
            ConditionExpression: "#email <> :email",
            ExpressionAttributeNames: {
                "#email": "email",
            },
            ExpressionAttributeValues: {
                ":email": body.email,
            },
        };
    

    await docClient.put(params).promise();

条件有效,但conditional puts防止的是覆盖记录具有相同的主键:

The PutItem operation overwrites an item with the same key (if it exists). If you want to avoid this, use a condition expression. This allows the write to proceed only if the item in question does not already have the same key.

为了防止重复的电子邮件,请将其作为您 table 主键的一部分,或者在写入 DynamoDB 之前手动检查唯一性。