Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DynamoDB-基于记录数的条件put_Javascript_Node.js_Amazon Dynamodb_Aws Sdk - Fatal编程技术网

Javascript DynamoDB-基于记录数的条件put

Javascript DynamoDB-基于记录数的条件put,javascript,node.js,amazon-dynamodb,aws-sdk,Javascript,Node.js,Amazon Dynamodb,Aws Sdk,我试图在DynamoDB中实现一种乐观锁定,根据给定分区键(表使用复合键)存在的记录数插入一条新记录 特定的上下文将是一个分类账,分类账中的每个文档表示存款或取款,并包含诸如totalBalance、purchasedItem(存款时为空)、userId、createDate等内容 其思想是,该服务(异步)将在其工作流开始时获取给定用户的分类账分录数及其最新记录。它将在更新分类账之前执行一些操作。我希望最后一步执行一个transactionwrite,其中条件检查确保用户的分类账分录数量与开始时

我试图在DynamoDB中实现一种乐观锁定,根据给定分区键(表使用复合键)存在的记录数插入一条新记录

特定的上下文将是一个分类账,分类账中的每个文档表示存款或取款,并包含诸如
totalBalance
purchasedItem
(存款时为空)、
userId
createDate
等内容

其思想是,该服务(异步)将在其工作流开始时获取给定用户的分类账分录数及其最新记录。它将在更新分类账之前执行一些操作。我希望最后一步执行一个
transactionwrite
,其中条件检查确保用户的分类账分录数量与开始时相同。如果没有,流程将重新开始

我知道DynamoDB支持对单个记录的属性进行条件检查,但是是否可以编写一个条件检查来查看查询返回的记录数

aws dynamodb query --table-name myLedger --key-condition-expression "userId = :u" --expression-attribute-values '{":u": {"S": "0123abcd"}}' --select "COUNT"
这是不可能的

DynamoDB只在文档级别运行,不知道该分区键下存储了多少文档。如果不阅读所有文档,您就无法理解它,而且也无法保证您甚至可以在单个操作中完成此操作,更不用说以可用于条件表达式的方式了

对于关系数据库来说,每个条目有一个文档的设计更为合适,在这里并不能真正起作用。在文档数据库中,通常需要一个包含多个条目的文档


如果您重构数据模型,使所有条目都包含在一个文档中,那么通过更新表达式以原子方式执行此更新就变得微不足道了。

我怀疑情况确实如此,因此实际上已经建议对我们的潜在客户进行类似的重构。谢谢你的确认!