0

由于 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();
4

1 回答 1

0

条件是有效的,但是条件阻止的是用相同的主键覆盖 记录:

PutItem 操作使用相同的键(如果存在)覆盖项目。如果您想避免这种情况,请使用条件表达式。这允许写入仅在所讨论的项目还没有相同的密钥时进行。

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

于 2022-01-24T11:52:06.207 回答