Подтвердить что ты не робот

Вставка и запрос даты с помощью MongoDB и Nodejs

Мне нужна помощь в поиске записи по дате в mongodb и nodejs.

Я добавляю дату в объект json в scraping script следующим образом:

jsonObj.last_updated = new Date();

Этот объект вставляется в mongodb. Я вижу это следующим образом:

 "last_updated" : "2014-01-22T14:56:59.301Z"

Тогда в моем nodejs script я делаю findOne():

 var jObj = JSON.parse(line.toString());

 collection.findOne(jObj,function(err, doc) {
   if (doc){
     console.log(doc._id);
   } else  {
     console.log('not found');
   }
 });

Объект не найден. Если я удалю последнее_определенное поле из объекта, оно будет найдено, поэтому определенно будет проблема.

Если я изолирую поле следующим образом:

collection.findOne({last_updated: '2014-01-22T14:56:59.301Z'},function(err, doc) {
  if (doc){
    console.log(doc._id);
  } else  {
    console.log('not found');
  }
});

Ничего не происходит. Что я делаю неправильно?

Спасибо.

4b9b3361

Ответ 1

Вам нужно передать объект даты, а не строку даты.

collection.findOne({last_updated: new Date('2014-01-22T14:56:59.301Z')},function(err, doc) {

Драйвер MongoDB преобразует его в ISODate:

{ 
   "_id" : ObjectId("52dfe0c469631792dba51770"), 
   "last_updated" : ISODate('2014-01-22T14:56:59.301Z') 
}

Проверьте следующие вопросы:

Ответ 2

Прояснить. Важно знать, что:

  • Да, вы должны передать объект Date Javascript.
  • Да, он должен быть дружелюбным к ISODate
  • Да, по моему опыту, чтобы это работало, вам нужно манипулировать датой ISO
  • Да, работа с датами, как правило, всегда является утомительным процессом, а mongo не является исключением.

Вот рабочий фрагмент кода, в котором мы немного манипулируем датами, чтобы гарантировать, что Mongo справится с этим правильно. В этом примере я использую модуль mongoose и хочу получить результаты для строк, атрибут даты которых меньше (т.е. до) даты, указанной как параметр myDate.

var inputDate = new Date(myDate.toISOString());
MyModel.find({
    'date': { $lte: inputDate }
})