2015-07-30 3 views
1

У меня есть мангуста схема, состоящая из массива элементов с полем датыMongDB с Mongoose -Выберите указанный диапазон дат отбрасывая время

var querySchema = new Schema({ 
     id   : String, 
     description: String, 
     results : [{ 
      date : { type: Date, default: new Date }, 
      result: Object 
     }] 
}); 

Когда я добавить новые элементы я использую New Date. Результат в таких элементах, как:

{ 
    "_id" : ObjectId("55b96289c9dcbe79207c4b08"), 
    "id" : "11", 
    "description" : "List of graphs loaded in the KB (24 graphs as of 09/05/2015 + 5 default Virtuoso graphs)", 
    "results" : [ 
     { 
      "result" : "", 
      "_id" : ObjectId("55b96289c9dcbe79207c4b09"), 
      "date" : ISODate("2015-07-29T22:00:00.000Z") 
     }, 
     { 
      "result" : "", 
      "_id" : ObjectId("55b962e05489d4de20a99f87"), 
      "date" : ISODate("2015-07-31T22:00:00.000Z") 
     }, 
     { 
      "result" : "", 
      "_id" : ObjectId("55b963284f5083492119ef5b"), 
      "date" : ISODate("2015-08-29T22:00:00.000Z") 
     } 
    ], 
    "__v" : 0 
} 

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

router.route('/aggregate') 

     .get(function(req, res) { 

     if (req.param('id')) { 

      // Extract the date range filterin query paramteres if they were passed 
      var start = new Date(req.param('start')) || new Date; 
      var end = req.param('end') ? new Date(req.param('end')) : new Date; 

      Query.aggregate([ 
        { 
        "$match": 
        { 
           id   : req.param('id'), 
           "results.date": { "$lt": end, "$gt": start } 
        }, 
        }],function(err,result) { 
          res.json(result); 
       }); 

     } else res.json({message: 'Invalid request. Please specify a query ID'}); 
    }); 

Я пытался, например, делать вызов с параметрами ?id=11&start="2014, 7, 31" и показывает результаты 29-го июля. Различные запросы не работают, поэтому я знаю, что что-то не так.

Я пробовал различные форматы даты, удаляя время, перезагружая его, но ничего не работало до сих пор.

Поблагодарили бы за любую помощь.

ответ

1

Объект конструктор JavaScript Date для времени UTC может принимать входные данные как "String":

> new Date("2014-07-31") 
ISODate("2014-07-31T00:00:00Z") 

Но это не правильно:

> new Date(2015,7,31) 
ISODate("2015-08-30T14:00:00Z") 

Либо это:

> new Date("2015/7/31") 
ISODate("2015-07-30T14:00:00Z") 

Есть другие vali Значения застройщика г для UTC, таких как числовое значение, если это костюмы:

> new Date(1406764800000) 
ISODate("2014-07-31T00:00:00Z") 

Или просто вокруг даты в день, как так:

> var date = new Date() 
> date 
ISODate("2015-07-30T01:42:23.631Z") 
> new Date(date.valueOf() - (date.valueOf() % (1000 * 60 * 60 * 24))) 
ISODate("2015-07-30T00:00:00Z") 

Это ваши методы работы с целой датой без каких-либо часов или секунд с помощью основного конструктора объекта и значений.

Конструируйте дату UTC как целый день, и это должно соответствовать вашим выборам.

+0

Спасибо @Blakes для заметок. Однако это еще не решило мою проблему. По какой-то причине MongoDB по-прежнему не может сравнивать дату. Я передал строку даты '2015/7/31', и я получаю' Mon Aug 31 2015 00:00:00 GMT + 0200 (CEST) ' – AhmadAssaf

+0

@AhmadAssaf Они не являются заметками, они являются« правильным »способом установить «Date» contructor из «строки» или числового значения. Текущие строки, которые вы отправляете, не будут иметь правильное значение. Используйте приведенные выше примеры. То есть. «2015/7/31» Неверно! «2015-07-31» Правильно! –

+0

извините, если термин «примечание» не подходит. Тем не менее, я сделал именно это, я жестко закодировал даты в методах, которые вы указали 'new Date (« 2015/7/31 »)' и 'new Date (1406764800000)'. Мне интересно, требует ли тип Date в MongoDB что-то конкретное, потому что сравнение не выполняется. – AhmadAssaf

Смежные вопросы