在AWS DynamoDB查询中,是否可以将字符串作为数字查询?
就我而言,我有一个myDate字段,其中包含从1970年开始以字符串格式表示的秒数。它也是全局二级索引上的排序键。
我需要从DynamoDb返回所有记录,其中myDate在2个查询参数之间:fromDate和toDate。 问题是myDate是一个字符串,因此我无法轻松比较这3个值。 目前,我有一个查询如下:
var params = {
TableName: "MyTable",
IndexName: "GSI",
KeyConditionExpression: "primaryKey = :primaryKey AND myDate BETWEEN :fromDate AND :toDate",
ExpressionAttributeValues: {
":primaryKey ": {"N": "1"},
":fromDate": {"S": "1550637900"},
":toDate": {"S": "1550639400"}
}
}
但是,由于字符串比较,它不能正常工作。例如“ 2”>“ 10”。 那么有没有办法对myDate进行数字比较?
亚马逊专门提到它不可能直接实现:
BETWEEN:大于或等于第一个值,并且小于或等于第二个值。
AttributeValueList必须包含两个相同类型的AttributeValue元素,即String,Number或Binary(不是集合类型)。如果目标值大于或等于第一个元素且小于或等于第二个元素,则目标属性匹配。如果一项包含的AttributeValue元素类型与请求中提供的类型不同,则该值不匹配。例如,{“ S”:“ 6”}与{“ N”:“ 6”}不进行比较。此外,{“ N”:“ 6”}与{“ NS”:[“ 6”,“ 2”,“ 1”]}的比较
但是也许我看不到更好的方法?
答案 0 :(得分:1)
不,你不能。
正如您所发现的那样,暂时不会有问题。多久取决于...如果您要处理的是32位Unix / Linux Epoch值...那么这些值将在2038
中用完否则,直到2286达到10000000000(11位数字)时,您都不必担心
将来,请考虑将日期/时间存储为ISO格式的字符串"2019-07-29T12:37:54Z"
或"20190729T123754Z"
这将在9999年为您服务。