使用 AWS Amplify DataStore 在保存时聚合
Aggregate on Save with AWS Amplify DataStore
我正在尝试将我之前拥有 Django 后端的项目迁移到单个 AWS DataStore 后端。到目前为止一切顺利,但我缺少相当于 Django 的 'property' 命令的聚合字段。
本质上,我的应用程序(AppSync 后端、DynamoDB)中有一个非常简单的架构:
type Account @model {
id: ID!
balance: Float!
transactions: [Transaction] @connection(name: "transactions")
}
type Transaction @model {
id: ID!
note: String!
amt: Float!
account: Account @connection(name: "transactions")
而且,我想找到一种方法来快速显示帐户余额(所有 'amt' 值的总和)。我认为最好的方法是在保存新交易后更新账户余额模型,但无法找到正确的方法。
什么是最佳做法?有人可以分享一些例子吗?
你没有提供足够的关于你的应用程序的详细信息来考虑每个帐户的交易数量等,所以我可能会偏离基础。
请记住,使用 Datastore 时,所有数据都会同步到本地存储,并且所有查询 运行 都会针对本地存储进行同步,因此检索所需事务的成本应该很低。因此,为什么不只查询要求和的事务并使用 reduce 来聚合值。
这是部分伪代码示例。
var transactions = result-of-query
let initialValue = 0
let sum = transactions.reduce(function (previousValue, currentTransaction) {
return previousValue + currentTransaction.amt
}, initialValue)
我正在尝试将我之前拥有 Django 后端的项目迁移到单个 AWS DataStore 后端。到目前为止一切顺利,但我缺少相当于 Django 的 'property' 命令的聚合字段。
本质上,我的应用程序(AppSync 后端、DynamoDB)中有一个非常简单的架构:
type Account @model {
id: ID!
balance: Float!
transactions: [Transaction] @connection(name: "transactions")
}
type Transaction @model {
id: ID!
note: String!
amt: Float!
account: Account @connection(name: "transactions")
而且,我想找到一种方法来快速显示帐户余额(所有 'amt' 值的总和)。我认为最好的方法是在保存新交易后更新账户余额模型,但无法找到正确的方法。
什么是最佳做法?有人可以分享一些例子吗?
你没有提供足够的关于你的应用程序的详细信息来考虑每个帐户的交易数量等,所以我可能会偏离基础。
请记住,使用 Datastore 时,所有数据都会同步到本地存储,并且所有查询 运行 都会针对本地存储进行同步,因此检索所需事务的成本应该很低。因此,为什么不只查询要求和的事务并使用 reduce 来聚合值。
这是部分伪代码示例。
var transactions = result-of-query
let initialValue = 0
let sum = transactions.reduce(function (previousValue, currentTransaction) {
return previousValue + currentTransaction.amt
}, initialValue)