首页 > 解决方案 > AWS Amplify 数据存储查询日期

问题描述

所以我想尝试一下 AWS Amplify,因为我开始的新项目将开始我们的简单但会变得更加复杂,因此我不想走 Firebase 路线。所以我设置了 Auth 并创建了我的数据模型并将 Amplify Lib 添加到我的 Angular 前端。我可以登录并读取我的数据。到目前为止,一切都很好。

现在我想对我的数据进行基本查询。对于诸如名称之类的内容,基于基本字符串字段的过滤很容易:

const members = await DataStore.query(Member, m => m.firstName("eq", "Steve"));

我似乎找不到任何关于如何查询日期等内容的文档?

我有一个名为 Event 的模型,您将如何为事件进行典型的创建(注意字段StartTimestampEndTimestamp):

await DataStore.save(
    new Event({
        "Title": "Lorem ipsum dolor sit amet",
        "StartTimestamp": "1970-01-01T12:30:23.999ZM",
        "EndTimestamp": "1970-01-01T12:30:23.999ZM",
        "Notes": "Lorem ipsum dolor sit amet"
    })
);

StartTimestamp和都是EndTimestamp类型AWSDateTime在此处输入图像描述

在为事件提取数据时,我看到 JS 中的类型是字符串。那么如何查询日期呢?字符串比较无济于事。我知道 AWS Amplify 的底层数据库是 GraphQL,查询日期很容易,但我仍然受限于 Amplify DataStore Lib 给我的工作。

任何建议将不胜感激。

标签: amazon-web-servicesaws-amplifydatastore

解决方案


我只想添加一些有关 AWS 和日期字段的附加信息。

  • AWStimestamp 是一个整数值,表示 1970-01-01-T00:00Z 之前或之后的秒数
  • AWSDateTime 是一个字符串字段,将时间戳表示为 ISO 8601 格式的字符串。

AWS 类型参考中的更多信息

两者都有其用途。

  • AWStimestamp 在数据库中占用的空间更少。
  • AWSDateTime 在调试时易于处理,因为它是人类可读的
  • 都按字典顺序正确排序
  • 两者都支持使用“gt”、“lt”、“eq”的查询谓词,AWStimestamp 将使用数字比较,AWSDateTime 将使用字符串比较

如上所述,只需将变量日期值转换为 ISO 8601 格式的字符串表示。


推荐阅读