Как запросить поле метки времени по году в feathersjs? - PullRequest
0 голосов
/ 25 июня 2018

Так что в настоящее время у меня есть поле с отметкой времени в формате значения, например 1479664146607.

То, что я хотел сделать, - это получить все данные с отметкой времени, у которой, скажем, год 2017.

Мой текущий код не работает. Он получает все данные, а затем использует метод фильтра.

Допустим, у меня более 2000 записей.

const records = []; // all records
const data = records.filter(r => new Date(r).getYear == '2017');

Пока этот код работает, он убивает сервер.

Моя база данных - nedb, и с помощью feathersjs я могу получить элементы равенства с помощью

app.service('messages').find({
  query: {
    timestamp: '2017'
  }
});

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

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 25 июня 2018

Хорошо, я использовал операторы $gt и $lt.

Допустим, мы хотим получить все данные за год 2018.

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

    const year = '2018';

    // Get previous year based on given year
    const previousYear = moment(year, 'YYYY').subtract(1, 'year').format('YYYY');
    // Get next year based on given year
    const nextYear = moment(year, 'YYYY').add(1, 'year').format('YYYY');

    // get full ending date of previous year
    const endOfPreviousYear = moment(previousYear, 'YYYY').endOf('year').format('x');
    // get full starting date of next year
    const startOfNextYear = moment(nextYear, 'YYYY').startOf('year').format('x');

    // get data where year is greater than `endOfPreviousYear` and less than `startOfNextYear`
    const yearQuery = {
        $gt: +endOfPreviousYear,
        $lt: +startOfNextYear
    }

    app.service('messages').find({
        query: {
            timestamp: yearQuery
        }
    });
...