我与用户之间有一个表格,我想查询在fx April中创建的所有用户。
创建用户时,将自动为该用户创建一个时间戳。
我在表中创建了一个索引,其中时间戳是分区键,而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"
您不能有条件地查询分区键。您必须指定完整的分区键值,没有任何条件。该BETWEEN
比较操作仅适用于有条件查询排序键。
您必须指定分区键名称和值作为相等条件。
您可以选择为排序键(如果存在)提供第二个条件。排序键条件必须使用以下比较运算符之一:
- a = b —如果属性a等于值b,则为true
- a <b —如果a小于b,则为true
- a <= b —如果a小于或等于b,则为true
- a> b —如果a大于b,则为true
- a> = b —如果a大于或等于b,则为true
- b和c之间的a —如果a大于或等于b且小于或等于c,则为true。
还支持以下功能:
- starts_with(a,substr) —如果属性a的值以特定的子字符串开头,则为true 。
要获得查询一系列时间戳的能力,使用DynamoDB并非一帆风顺。一种解决方案是在您的项目中添加一个附加字段,其中仅包含时间戳的年份和月份。然后,您可以创建一个全球二级索引(GSI),其中以年-月-字段为主要关键字,并以完整时间戳为排序关键字。使用这种方法,您可以查询在给定月份创建的所有用户。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句