使用 DynamoDb 和 DocClient,是否可以使用依赖于两个属性和一个除法的 updateExpression?

Using DynamoDb and DocClient, is it possible to use an updateExpression that relies on two attributes and a division?

首先,updateExpression 似乎只支持带有 N 值的 + 或 -。

假设我们有 table User,用户有:totalReviewstotalReviewValuesaverageRating。 AverageRating = totalReviewValues / totalReviews.

例如:

{ 
  userID: 'someID',
  totalReviewValues: 9,
  totalReviews: 2,
  averageRating: 4.5

我想做一些更新表达式:

aws dynamodb update-item \
    --table-name User \
    --key '{"id":{"S": userID }}' \
    --update-expression "SET averageRating = totalReviewValues / totalReviews" \
    --return-values ALL_NEW

现在我知道这是不可能的,但是是否有推荐的方法可以在不使用 GET/Update 模式的情况下完成此操作?我需要 averageRating 以便我可以对其进行排序。

我有一种方法,我可以向用户添加一个流,每当有更新并且 totalReviewstotalReviewValues 不同时,我就可以更新 averageRating?

使用 DynamoDB 无法完成您要求的操作。

DynamoDB 仅支持逐项操作。即使当您使用新交易 API 执行交易时,您仍然在单独操作每个项目。

换句话说,DynamoDB 不支持聚合。如果您想计算多个项目的总和,则需要在您的应用程序中执行此操作。