AppSync - запросить все элементы, созданные в диапазоне дат? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь запросить мои элементы (у которых есть поля AWS DateTime из CreatedAt и updatedAt) для всех в пределах определенного диапазона дат.Например, последние 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 ]

0 голосов
/ 24 мая 2019

Вы можете использовать этот запрос для фильтрации 2 AWSDateTime:

query {
  searchNotes(filter:{createdAt: { between: ["2018-12-27T00:00:00", "2019-01-27T00:00:00"]}}) {
    items{
      id
        title
      createdAt
    }
  }
}

0 голосов
/ 04 января 2019

На момент написания статьи (3 января 2019 г.) самый простой способ сделать это - сохранить дату в виде целого числа (например, секунд с начала эпохи), которое откроет поля фильтра gt, lt, gte, ... в автоматически сгенерированном поиске. входной фильтр фильтра.

Другое решение - написать собственный распознаватель с помощью консоли AWS AppSync или собственного стека CloudFormation. При написании собственного распознавателя вы можете использовать весь Elasticsearch DSL для реализации всех видов запросов (см. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html).. Чтобы перейти по этому пути, вы можете добавить собственное поле поиска к типу запроса в своей схеме и написать собственный распознаватель.

type Query {
  searchNotesByCreatedAt(start: String!, end: String!): NotesConnection
}

Затем через консоль или через собственный стек CloudFormation вы можете написать резольвер, например:

{
  "version": "2017-02-28",
  "operation": "GET",
  "path": "/note-<your-api-id>/doc/_search", // created by amplify
  "params": {
    "body": {
      "sort": [{ "createdAt" : {"order" : "desc"}}],
      "query": {
        "range" : {
            "createdAt" : {
                "gte": $ctx.args.start, 
                "lte": $ctx.args.end
            }
        }
      }
    }
  }
}

Вам потребуется только временно развернуть этот преобразователь с помощью консоли или собственного стека CF. Ведется работа, чтобы вы могли написать свои собственные распознаватели из CLI-интерфейса усиления. Для получения дополнительной информации о том, как это будет работать, см. https://github.com/aws-amplify/amplify-cli/issues/574.

Дайте мне знать, если это работает для вас.

...