如何按主键和其他条件更新项目?

use*_*521 3 amazon-dynamodb

我正在尝试通过email(HASH PK)更新项目,id并且verifyToken.我的查询如下所示:

params =
  TableName: 'users'
  Key:
    email:
      S: 'example@email.com'
  AttributeUpdates:
    verified:
      Action: 'PUT'
      Value:
        BOOL: true
    verifyToken:
      Action: 'DELETE'
  ExpressionAttributeValues:
    ':id': { S: '123' }
    ':verifyToken': { S: 'XXX' }
  ConditionExpression: 'id = :id and verifyToken = :verifyToken'

dynamodb.updateItem(params)
Run Code Online (Sandbox Code Playgroud)

换句话说,我想更新项目,其中email ='example@email.com'并且id ='123'并且verifyToken ='XXX',但是我收到以下错误:

Can not use both expression and non-expression parameters in the same request: 
Non-expression parameters: {AttributeUpdates} 
Expression parameters: {ConditionExpression}
Run Code Online (Sandbox Code Playgroud)

mko*_*bit 6

您正在将遗留参数(AttributeUpdates)(仅用于向后兼容)与表达式参数(ConditionExpression)组合在一起.正如错误所述,您无法做到这一点.

你需要UpdateExpression和你一起使用ConditionExpression.

这将是这样的.您可能需要在以下位置使用表达式属性名称/值UpdateExpression:

ConditionExpression: 'id = :id and verifyToken = :verifyToken'
UpdateExpression: 'SET verified = true, REMOVE verifyToken'
Run Code Online (Sandbox Code Playgroud)

有关更新表达式的更多信息,请参阅此文档