Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js Dynamodb通过多个键进行排序和过滤_Node.js_Amazon Web Services_Nosql_Amazon Dynamodb - Fatal编程技术网

Node.js Dynamodb通过多个键进行排序和过滤

Node.js Dynamodb通过多个键进行排序和过滤,node.js,amazon-web-services,nosql,amazon-dynamodb,Node.js,Amazon Web Services,Nosql,Amazon Dynamodb,我试图存储三个主列,以保存用户的分数 User DateTime Score 1 2018-01-01-09-00 5 1 2015-11-24-11-32 2 2 2014-11-24-11-32 1 3 2016-11-24-11-32 3 我需要/更简单的功能:

我试图存储三个主列,以保存用户的分数

User        DateTime                     Score
1           2018-01-01-09-00             5
1           2015-11-24-11-32             2
2           2014-11-24-11-32             1
3           2016-11-24-11-32             3
我需要/更简单的功能:

  • 用户/日期时间需要是唯一的-(所以我们打算将其用作分区/范围键)
  • 分数需要使用
    UpdateExpression:“ADD#C:num”
    自动递增(他们可以在一分钟内得分5次,而不是得到5分)
  • 需要检索特定的用户/时间分数条目
当我需要时,复杂的部分会:

  • 需要检索datetime包含特定部分的所有条目(例如,可能是2018年,可能是2018-01年)-“查询”中的有效检索也是如此,但按分数排序。这让我可以按天、月、年、小时等找出用户的最高分数
这会导致以下问题:

  • “Score”不能用作复合键的一部分,因为它是原子级增加的
  • DateTime必须在范围键中,因为需要使用“BeginsWith”
  • 我能看到的唯一方法是使用两个表:

    User        DateTime            compound    
    (partition) (range key)               
    1           2018-01-01-09-00    1#2018-01-01-09-00          
    1           2015-11-24-11-32    1#2015-11-24-11-32               
    2           2018-01-01-09-00    2#2018-01-01-09-00    
    3           2016-11-24-11-32    3#2018-01-01-09-00      
    
    表2:

    user#DateTime                     Score
    (partition key)                   (range key)
    1#2018-01-01-09-00                5
    1#2015-11-24-11-32                2
    2#2014-11-24-11-32                1
    3#2016-11-24-11-32                3
    
    在哪里做两个查询 1.获取以(2018-01*)开头的日期时间列表 2.获取返回的所有日期时间的分数

    但是,这似乎太过分了,因为有多个查询

    是否有一些明显的遗漏,因为它似乎是dynamodb的主要候选项,即简单查找

    我不想单独保存日期的每个阶段,例如2018年、2018-01年、2018-01-01年、2018-01-09年,因为这看起来非常重复,需要may写入来更新

    理想情况下,我会有一个复合范围的关键点 分数#dateTime,但我不能这样做,因为分数必须以原子方式更新