amazon-web-services - 在 AWS DynamoDB 查询中,是否可以将字符串查询为数字?
问题描述
在 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"]} 比较
但也许有更好的方法我没有看到?
解决方案
不,你不能。
正如你所发现的,它暂时不会成为问题。多长时间取决于...如果您正在处理 32 位 Unix/Linux Epoch 值...那么这些值将在2038年用完
否则,您不必担心,直到 2286,当您达到 10000000000(11 位)
将来,考虑将日期/时间存储为 ISO 格式的字符串,"2019-07-29T12:37:54Z"
或者"20190729T123754Z"
这会照顾你到 9999 年。
推荐阅读
- sql - 在选择语句中提取“除 X 之外的所有内容”,一次测试多个字段
- ios - 从 Xcode10 部署到 iOS11 设备时,ARWorldTrackingConfiguration 不起作用
- sql - 使用相同的 SQL 数据库最佳实践同时进行集成测试
- dart - 关闭应用程序而不退出 Flutter/Dart
- java - 初始化或不初始化 JavaFX TextField
- sapui5 - 无法向页面添加页脚。未捕获的类型错误
- java - 如何在 Java 8 中使用 FilterFunction 过滤 XML
- node.js - node.js中的Python多处理-子进程打印不起作用
- javascript - 具有多个元素的 html2Canvas 查询
- java - 如何在构造函数中模拟实例?