1

目前我有一个时间戳字段,其值格式如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'
  }
});

此代码将不起作用,因为它将搜索确切的年份。我正在寻找一种在数据库中搜索时间戳字段之前将其转换为年份的方法。

4

1 回答 1

2

好的,所以我所做的是使用$gtand$lt运算符。

假设我们要获取 year 中的所有数据2018

使用momentjs,我做了这样的事情:

    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
        }
    });
于 2018-06-25T06:30:58.393 回答