Как отфильтровать даты в Couchbase и Scala - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть простой json:

{
 "id": 1,
 "name": "John",
 "login": "2019-02-13"
}

Документы этого типа хранятся в Couchbase, но сейчас я хотел бы создать индекс (или список другим способом, который хорошо подходит), который должен фильтроватьсявсе документы, где login старше 30 дней.Как мне создать его в Couchbase и получить в Scala?

Пока я получаю все документы из базы данных и фильтрую их в API, но я думаю, что это не очень хороший способ.Я хотел бы отфильтровать его на стороне базы данных и получить только те документы, у которых login старше 30 дней.

Теперь в Scala у меня есть только метод только для получения документов по id:

bucket.get(id, classOf[RawJsonDocument])

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Следующий запрос более эффективен, поскольку он может передать предикат в IndexScan, когда ключ индекса соответствует одной стороне оператора отношения предиката.Если у вас есть выражение, полученное из ключа индекса, оно получает все значения и фильтрует их в обработчике запросов.

CREATE INDEX ix_login_date ON mybucket (login);
SELECT u.*
FROM mybucket AS u
WHERE u.login < DATE_ADD_STR(NOW_STR(), 'day', -30) ;
0 голосов
/ 14 февраля 2019

Я бы рекомендовал взглянуть на N1QL (это просто SQL для JSON).Вот пример:

SELECT u.*
FROM mybucket u
WHERE DATE_DIFF_STR(NOW_STR(), login, 'day') > 30;

Вам также понадобится индекс, например:

CREATE INDEX ix_login_date ON mybucket (login);

Хотя я не могу обещать, что это индекс best ,по крайней мере, это поможет вам начать.

Я использовал DATE_DIFF_STR и NOW_STR, но есть и другие способы манипулирования датами.Проверьте Дата Функции в документации.А поскольку вы новичок в N1QL, я бы порекомендовал ознакомиться с интерактивным учебным пособием по N1QL .

...