【问题标题】:MongoDB / Mongoose: find(query) and aggregate([ $match: query ]) results differ when using dates and $gte / $lteMongoDB / Mongoose:使用日期和 $gte / $lte 时,find(query) 和 aggregate([ $match: query ]) 结果不同
【发布时间】:2015-01-11 14:08:50
【问题描述】:

我使用 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);

任何想法为什么会这样?

非常感谢!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    在使用聚合时,删除 toISOString() 聚合不适用于此

    这行得通:

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

    【讨论】:

    • 写:var query = { dueDate: { $lte: new Date() } };然后与 toISOString() 相同,您将看到差异 var query = { dueDate: { $lte: new Date().toISOString() } };
    • 啊,你说得对!但是, moment() 不起作用,因为显然聚合需要本机 Date 对象,因此 moment().toDate() 在我的情况下有效。无论如何,这有点奇怪,但它在查找和聚合方面有所不同。
    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2019-05-04
    • 2021-07-12
    • 2020-07-03
    • 2022-11-21
    • 2018-09-28
    • 2020-08-19
    相关资源
    最近更新 更多