Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Amazon web services AWS DynamoDB |如何查询两个日期之间的时间戳?_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

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

Amazon web services AWS DynamoDB |如何查询两个日期之间的时间戳?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我有一个包含用户的选项卡,我希望查询在f.x April中创建的所有用户 创建用户时,会自动为该用户创建时间戳 我在表中创建了一个索引,时间戳作为分区键,id作为排序键 时间戳以秒为单位 这是我的查询代码: GetUsersOnTimestamp(): Promise<any> { return new Promise( (resolve, reject) => { const _dynamoDB = new AWS.DynamoDB.Document

我有一个包含用户的选项卡,我希望查询在f.x April中创建的所有用户

创建用户时,会自动为该用户创建时间戳

我在表中创建了一个索引,时间戳作为分区键,id作为排序键

时间戳以秒为单位

这是我的查询代码:

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,
            }
        };

您不能有条件地查询分区密钥。必须无条件地指定完整分区键值。BETWEEN comparison运算符仅可用于有条件地查询排序键

从:

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

如果需要,可以选择为排序键提供第二个条件 目前排序键条件必须使用以下条件之一 比较运算符:

a=b—如果属性a等于值b,则为true a=b-如果a大于或等于b,则为真 a介于b和c之间-如果a大于或等于b且小于或等于c,则为真。 还支持以下功能:

以a开始,如果属性a的值以特定子字符串开始,则为true。
要获得查询一系列时间戳的能力,使用DynamoDB并不能直接实现。一种解决方案是在项目中添加一个额外的字段,该字段只包含时间戳的年份和月份。然后,您可以创建一个全局二级索引GSI,其中年-月字段作为主键,完整时间戳作为排序键。使用这种方法,您可以查询在给定月份创建的所有用户。

您不能有条件地查询分区密钥。必须无条件地指定完整分区键值。BETWEEN comparison运算符仅可用于有条件地查询排序键

从:

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

如果需要,可以选择为排序键提供第二个条件 目前排序键条件必须使用以下条件之一 比较运算符:

a=b—如果属性a等于值b,则为true a=b-如果a大于或等于b,则为真 a介于b和c之间-如果a大于或等于b且小于或等于c,则为真。 还支持以下功能:

以a开始,如果属性a的值以特定子字符串开始,则为true。
要获得查询一系列时间戳的能力,使用DynamoDB并不能直接实现。一种解决方案是在项目中添加一个额外的字段,该字段只包含时间戳的年份和月份。然后,您可以创建一个全局二级索引GSI,其中年-月字段作为主键,完整时间戳作为排序键。使用这种方法,您可以查询给定月份创建的所有用户。

谢谢您的回答。我制作了一个GSI,id作为PartitionKey,时间戳作为SortKey。我得到以下错误:查询条件缺少键模式元素:id不使用PartitionKey是否不可能执行查询?如我的回答中所述,查询数据库时始终需要指定分区键。这就是为什么我建议您创建一个GSI,将时间戳中的年和月组合作为分区键。我还创建了另一个GSI,时间戳编号作为分区键,没有排序键,但得到以下错误:不支持查询键条件。为什么呢?我查询PartitionKey,参数都是真的对不起这些愚蠢的问题,我对DynamoDB很陌生。我可以在我的问题中看到你的答案,所以忽略它。谢谢你的帮助。真烦人,你不能单独向Partitinkey提问,尽管谢谢你的回答。我制作了一个GSI,id作为PartitionKey,时间戳作为SortKey。我得到以下错误:查询条件缺少键模式元素:id不使用PartitionKey是否不可能执行查询?如我的回答中所述,查询数据库时始终需要指定分区键。这就是为什么我建议您创建一个GSI,将时间戳中的年和月组合作为分区键。我还创建了另一个GSI,时间戳编号作为分区键,没有排序键,但得到以下错误:不支持查询键条件。为什么呢?我查询PartitionKey,参数都是真的对不起这些愚蠢的问题,我对DynamoDB很陌生。我可以在我的问题中看到你的答案,所以忽略它。谢谢你的帮助。但是,你不能单独从Partitinkey那里查询,这真的很烦人
ExpressionAttributeValues contains invalid key: Syntax error; key: "hkey"