MongoDB / Mongoose:find(query) 和aggregate([ $match: query ]) 结果在使用日期和 $gte / $lte 时不同

Mic*_*kel 3 mongoose mongodb node.js

我使用 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);
Run Code Online (Sandbox Code Playgroud)

但是,聚合 using$match和相同的查询不会:

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

// finds no entries (using the same query) []
Model.aggregate(aggregation, callback);
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

非常感谢!

kax*_*993 5

使用聚合时 remove toISOString() 聚合不适用于此

这有效:

var query = {
  dueDate: {
    $gte: moment()
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 啊,你说得对!然而, moment() 不起作用,因为显然聚合需要一个本地 Date 对象,所以 moment().toDate() 在我的情况下有效。无论如何,虽然查找和聚合有所不同,但有点奇怪。 (3认同)