2016-03-17 2 views
0

Я пытаюсь фильтровать запрос по диапазону дат динамически параметров от GETNode.js/MongoDB Дата Фильтр диапазон

var date_from = req.query['date_from']; 
var date_to = req.query['date_to']; 
var options = {}; 
if(date_from){ 
     if(!options["sentDateTime"]) options["sentDateTime"] = []; 
    var dateFrom = moment(new Date(date_from)).toDate(); 
     options["sentDateTime"]['$qte'] = dateFrom; 
} 

if(date_to){ 
    if(!options["sentDateTime"]) options["sentDateTime"] = []; 
    var dateTo = moment(new Date(date_to)).toDate(); 
     options["sentDateTime"]['$lte'] = dateTo; 
} 

Например мои варианты выглядят

{ sentDateTime: { '$qte': Tue Mar 01 2016 00:00:00 GMT+0000 (GMT) } } 

Остальной код

db.client.collection('mails_ed').find(options).limit(parseInt(req.query['limit'])).toArray(function(err, docs) { 
// ... 
}) 

Но он возвращает нулевые документы.

Edit:

После изменения мой объект выглядеть следующим образом

{ sentDateTime: 
    [ '$qte': Tue Mar 01 2016 00:00:00 GMT+0000 (GMT), 
    '$lte': Fri Mar 18 2016 00:00:00 GMT+0000 (GMT) ] 
} 

Как вы можете видеть, что варианты завернуть в массив «[]», как я могу это исправить?

+1

Это не действительная строка даты ISO для Mongo. Оберните объект момента в 'новая дата', а не наоборот. 'new Date (moment (date_to) .utc())' работал для меня –

+0

Спасибо за комментарий. Я иду с этим решением, но все же что-то не так. Я думаю, что, возможно, в объектных вариантах выглядит так, как сейчас выглядит – pr0metheus

ответ

1

Для создания объектного литерала вам нужно использовать фигурные скобки вместо квадратных скобок. Кроме того, я думаю, вы имели в виду $gte, а не $qte?

var date_from = req.query['date_from']; 
var date_to = req.query['date_to']; 
var options = {}; 
if(date_from){ 
     if(!options["sentDateTime"]) options["sentDateTime"] = {}; 
    var dateFrom = moment(new Date(date_from)).toDate(); 
     options["sentDateTime"]['$gte'] = dateFrom; 
} 

if(date_to){ 
    if(!options["sentDateTime"]) options["sentDateTime"] = {}; 
    var dateTo = moment(new Date(date_to)).toDate(); 
     options["sentDateTime"]['$lte'] = dateTo; 
} 
+0

Спасибо, что работает ... так что это была опечатка. – pr0metheus

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