使用 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
,用户有:totalReviews
、totalReviewValues
和 averageRating
。 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 以便我可以对其进行排序。
我有一种方法,我可以向用户添加一个流,每当有更新并且 totalReviews
和 totalReviewValues
不同时,我就可以更新 averageRating?
使用 DynamoDB 无法完成您要求的操作。
DynamoDB 仅支持逐项操作。即使当您使用新交易 API 执行交易时,您仍然在单独操作每个项目。
换句话说,DynamoDB 不支持聚合。如果您想计算多个项目的总和,则需要在您的应用程序中执行此操作。
首先,updateExpression 似乎只支持带有 N 值的 + 或 -。
假设我们有 table User
,用户有:totalReviews
、totalReviewValues
和 averageRating
。 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 以便我可以对其进行排序。
我有一种方法,我可以向用户添加一个流,每当有更新并且 totalReviews
和 totalReviewValues
不同时,我就可以更新 averageRating?
使用 DynamoDB 无法完成您要求的操作。
DynamoDB 仅支持逐项操作。即使当您使用新交易 API 执行交易时,您仍然在单独操作每个项目。
换句话说,DynamoDB 不支持聚合。如果您想计算多个项目的总和,则需要在您的应用程序中执行此操作。