选择仅限周末的日期

时间:2016-04-01 10:36:19

标签: javascript node.js mongodb mongoose mongodb-query

我正在尝试查询我的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');
  }
};

1 个答案:

答案 0 :(得分: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评估,因此它实际上比聚合操作运行得慢得多。你真的应该只使用没有$redact的MongoDB 2.4或更早版本:

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

你应该在这里针对UTC的日期调用.getUTCDay()