2016-04-01 3 views
1

Я пытаюсь запросить мою коллекцию mongoDB, чтобы вернуть документы, которые включают поле selectedDate, и проверить, выпадет ли строка даты в выходные дни (суббота [6] или воскресенье [0]).Выберите даты только для выходных

Как передать значение поля функции, чтобы проверить его? data возвращает undefined, но я не уверен, как правильно хранить его в var.

Запрос

Entry. 
    find({}). 
    where('selectedDate').equals(thisWeekend(data)). 
    exec(function(err, entries) { 
    console.log('Events on a weeked' + ' ' + entries); 
    }); 

Функция

function thisWeekend(data) { 
    var today = data.getDay(); 
    if (today == 6 || today == 0) { 
    console.log('WEEKEND BITCHES'); 
    } else { 
    console.log('Not the weekend'); 
    } 
}; 

ответ

2

Вы не делаете это так, вы делаете это так:

Entry.aggregate(
    [ 
     { "$redact": { 
      "$cond": { 
       "if": { 
        "$or": [ 
         { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 1 ] }, 
         { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 7 ] } 
        ] 
       }, 
       "then": "$$KEEP", 
       "else": "$$PRUNE" 
      } 
     }} 
    ], 
    function(err,results) { 
     if (err) throw err; 
     // results is weekend days only 
    } 
) 

Оператор $redact трубопровода делает фильтрацию документов по логическому выражению, здесь, используя $dayOfWeek, чтобы найти значение дня недели.

Альтернативный случай - это выражение $where, но поскольку для этого требуется оценка JavaScript, он работает намного медленнее, чем операция агрегации. Вы действительно должны использовать это только с MongoDB 2.4 или более ранних версиях, которые не имеют $redact:

Entry.find(
    { 
     "$where": function() { 
      var day = this.selectedDate.getUTCDay(); 
      return (day == 6 || day == 0); 
     } 
    }, 
    function(err,results) { 
     if (err) throw err; 
     // Just weekends 
    } 
) 

Где вы действительно должны называть .getUTCDay() здесь против даты, которая находится в UTC.

+0

Спасибо за это, это похоже на шаг в правильном направлении, однако 'results' возвращает как' undefined'. Есть ли еще какая-то часть, которую мне не хватает? –

+0

@RhysEdwards Вероятно, ваши «даты» на самом деле не являются объектами «Дата», а «строками». Но там действительно должна быть ошибка, если они где, Проверьте «err' ответ, чтобы быть уверенным. –

+0

@RhysEdwards Мой плохой! Честно говоря 3 раза в 4 раза я ввожу выражение '$ redact' в ответ здесь, я всегда забываю включить' $ cond'. Исправленный. –