我正在尝试查询特定日期范围内的所有项目(其中包含createdat和updatedat的aws datetime字段)。例如,过去48小时。
例如,使用此模式:
type Note @model @searchable @auth(rules: [{ allow: owner }]) {
id: ID!
note: String
createdAt: AWSDateTime
我可以使用搜索日期,例如:
query {
searchNotes(filter:{createdAt: { matchPhrasePrefix: "2018-12-27"}}) {
items{
id
title
createdAt
}
}
}
它返回所有与该字符串前缀匹配的utc时间的注解。
因此,我必须使用moment.diff()或其他方法对自己进行排序。
我不确定是否有更好/更有效的方法使用appsync和graphql按日期和时间进行搜索/过滤?
谢谢您。
2条答案
按热度按时间olqngx591#
在撰写本文(2019年1月3日)时,最简单的方法是将日期存储为整数(例如,从epoch开始的秒数),这将打开
gt, lt, gte, ...
自动生成的搜索解析器过滤器输入上的过滤器字段。另一个解决方案是使用aws appsync控制台或您自己的cloudformation堆栈编写您自己的解析器。在编写自己的解析器时,您可以利用整个elasticsearch dsl来实现各种查询(参见https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html). 要沿着这条路线走下去,您可以将自己的搜索字段添加到模式中的查询类型中,并编写一个自定义解析器。
然后通过控制台或您自己的cloudformation堆栈,您可以编写如下解析程序:
您将只需要使用控制台或您自己的cf堆栈临时部署这个解析器。我们正在做一些工作,以允许您从放大cli中编写自己的解析器。有关如何工作的更多信息,请参阅https://github.com/aws-amplify/amplify-cli/issues/574.
让我知道这是否适合你。
mepcadol2#
您可以使用此查询筛选2
AWSDateTime
: