AWS DynamoDB |如何查询两个日期之间的时间戳?

我与用户之间有一个表格,我想查询在f.x四月创建的所有用户。

创建用户时,将自动为该用户创建一个时间戳。

我在表中创建了一个索引,其中时间戳记是分区键,而id是排序键。

时间戳以Unix毫秒为单位。

这是我对此查询的代码:

GetUsersOnTimestamp(): Promise<any> {
    return new Promise( (resolve,reject) => {

        const _dynamoDB = new AWS.DynamoDB.DocumentClient();
        const startDate = 1554069600000;
        const endDate = 1556661600000;

        const params = {
            TableName: 'user-table',IndexName: 'timestamp-id-index',KeyConditionExpression: '#timestamp = :hkey BETWEEN :sdate AND :edate',ExpressionAttributeNames: {
                '#timestamp': 'timestamp'
            },ExpressionAttributeValues: {
                ':hkey': 'timestamp',':sdate': startDate,':edate': endDate,}
        };

我收到以下错误:

ExpressionAttributeValues contains invalid key: Syntax error; key: "hkey"
humingming001 回答:AWS DynamoDB |如何查询两个日期之间的时间戳?

您不能有条件地查询分区键。您必须指定一个完整的分区键值,没有任何条件。 BETWEEN比较运算符仅可用于有条件地查询排序键。

来自DynamoDB documentation

  

必须将分区键名称和值指定为相等   条件。

     

您可以选择为排序键提供第二个条件(如果   当下)。排序键条件必须使用以下之一   比较运算符:

     
      
  • a = b —如果属性 a 等于值 b
  • ,则为true   
  • a —如果 a 小于 b
  • ,则为true   
  • a —如果 a 小于或等于 b
  • ,则为true   
  • a> b —如果 a 大于 b
  • ,则为true   
  • a> = b —如果 a 大于或等于 b
  • ,则为true   
  • a在b和c之间 —如果a大于或等于b且小于或等于c,则为true。
  •   
     

还支持以下功能:

     
      
  • begins_with(a,substr) —如果属性 a 的值以特定的子字符串开头,则为true。
  •   

要获得查询一定范围的时间戳的能力,使用DynamoDB并非一帆风顺。一种解决方案是在项目中添加一个附加字段,其中仅包含时间戳的年份和月份。然后,您可以创建一个全球二级索引(GSI),其中以year-month-field字段为主键,并以完整时间戳记作为排序键。使用这种方法,您可以查询在给定月份创建的所有用户。

本文链接:https://www.f2er.com/3145465.html

大家都在问