CreateIndex с объектами привязки - PullRequest
7 голосов
/ 18 октября 2019

У меня есть коллекция, которая включает поле типа Time. Мне нужно иметь возможность запрашивать эту коллекцию по годам или по месяцам.

Я пытался использовать инструмент создания индекса на самом веб-сайте, используя такие вещи, как Year(data.expDate) и Month(data.expDate) вУсловия, но это не сработало.

Вот схема для моей коллекции:

type Expense {
  _id: ID!
  expAmount: Float!
  expDate: Time!
  expCategory: Category!
  _ts: Long!
}

Мне нужно иметь возможность перечислить расходы за конкретный год или конкретный месяц-год, без необходимости создавать отдельные поля месяца и года в моей коллекции.

1 Ответ

7 голосов
/ 18 октября 2019

Решением этой проблемы было создание индекса на основе вычисляемых полей, которые затем связывались в термины, что-то вроде:

CreateIndex({
  name: "expByYearMonth",
  source: [{
    class: Collection("Expense"),
    fields: {
      year:Query(Lambda("doc",Year(Select(["data","expDate"],Var("doc"))))),
      month:Query(Lambda("doc",Month(Select(["data","expDate"],Var("doc")))))
    }
  }],
  terms: [{ binding: "year" }, { binding: "month" }]
})

После этого я мог выполнять поиск по году, месяцу и получать результаты счто-то вроде:

Paginate( Match(Index('expByYearMonth'), [2019, 10]) )

(Особая благодарность @colllin и другим полезным людям на канале Fauna Slack за то, что они указали мне правильное направление.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...