Как отсортировать дату в базе данных NeDb с помощью JavaScript - PullRequest
0 голосов
/ 02 июля 2018

Как мне отсортировать даты, как показано ниже, в базе данных NeDb с помощью функции JavaScript?

Эта команда сортировки в функции loaddata() не работает:

loaddata() {
  this.$db.DBData.find({}).sort({ pubDate: 1 }).exec((err, docs) => {
    this.Data = docs;
  });
}

Примеры для pubDate:

Fri, 29 Jun 2018 20:15:00 +0200
Mon, 25 Jun 2018 04:22:00 +0200
Fri, 29 Jun 2018 05:10:00 +0200
Sat, 30 Jun 2018 23:35:43 +0200

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Ответ Гарри Чилингериана находится на правильном пути, но не забудьте вернуть документ в функцию карты. Для своего решения я решил оставить исходную дату и вместо этого создать другое свойство для хранения значения даты. Наконец, я думаю, что большинство пользователей предпочли бы обратный хронологический порядок:

loaddata() {
  this.$db.DBData.find({}).exec((err, docs) => {
    let newDocs = docs.map((doc)=>{
      doc.pubDateValue = new Date(doc.pubDate).valueOf(); // new property
      return doc; // return the new document
    });
    newDocs.sort((a, b)=>{
      return b.pubDateValue - a.pubDateValue; // reverse chronological order
    });
    this.Data = newDocs;
  });
}
0 голосов
/ 28 июля 2018

Если даты хранятся в виде строк, то сортировка их по строкам будет алфавитизировать их к короткому дню. Если вы преобразуете их в объекты Date перед сортировкой, это должно сработать:

loaddata() {
  this.$db.DBData.find({}).exec((err, docs) => {
    let newDocs = docs.map((doc)=>{
      doc.pubDate = new Date(doc.puDate).valueOf();
    });
    newDocs.sort((a, b)=>{
      return a.pubDate - b.pubDate; //you may have to switch the order
    });
    this.Data = newDocs;
  });
}

Другим решением было бы сохранить значение Date вместо строкового представления. Например, даты, которые вы указали выше, переводятся в:

[1530296100000, 1529893320000, 1530241800000, 1530394543000] 

Затем их сортировка приводит к:

[1529893320000, 1530241800000, 1530296100000, 1530394543000]

Преобразовано обратно это:

["Sun Jun 24 2018 22:22:00 GMT-0400 (Eastern Daylight Time)", 
"Thu Jun 28 2018 23:10:00 GMT-0400 (Eastern Daylight Time)", 
"Fri Jun 29 2018 14:15:00 GMT-0400 (Eastern Daylight Time)", 
"Sat Jun 30 2018 17:35:43 GMT-0400 (Eastern Daylight Time)"]

Вы можете видеть, как они сортируются по порядку сейчас и обратно в их строковом представлении. Извините за преобразование часового пояса. Я запустил этот пример в консоли браузера, чтобы убедиться, что он работает.

...