2014-11-14 86 views
3

我使用Mongoose来构建聚合管道,并且匹配工作正常,直到我想匹配日期使用$gte$lte运营商。奇怪的是,如果我使用匹配查询在常规find(),它按预期工作:

var query = { 
    dueDate: { 
    $gte: moment().toISOString() // I've also tried using $date { ... } 
    } 
}; 

// finds entries matching the query [..., ...] 
Model.find(query, callback); 

但是,使用$match聚集和相同的查询不会:

var aggregation = [{ 
    $match: query 
}]; 

// finds no entries (using the same query) [] 
Model.aggregate(aggregation, callback); 

任何想法,为什么是这样吗?

非常感谢!

回答

3

同时使用聚集删除toISOString()总对此并不

这个工程的工作:

var query = { 
    dueDate: { 
    $gte: moment() 
    } 
}; 
+0

感谢。但不,它不是 – Mickel

+0

写:var query = { dueDate:{ $ lte:new Date() } }; 然后用toISOString(下同),你会看到差异 VAR的查询= {。 的dueDate:{$ LTE:新的日期()toISOString() } }; – kaxi1993

+2

啊,你是对的!然而,moment()不起作用,因为显然聚合需要一个本地的Date对象,所以moment()。toDate()在我的情况下工作。无论如何,它有点奇怪,但它不同于查找和聚合。 – Mickel