【问题标题】:Mongoose query by date ranges with momentMongoose 按日期范围查询时刻
【发布时间】:2016-02-15 23:12:32
【问题描述】:

我的条件代码如下:

   if (req.query.df == "today") {
        start = moment().subtract(1,'days');
        end = moment().add(1,'days');
        condition = {"$gt":start, "$lt":end};
    } else if(req.query.df == "yesterday") {
        start = moment().subtract(2, 'days');
        end = moment().subtract(1, 'days');
        condition = {"$gt":start, "$lt":end};
    }

还有我的猫鼬查询:

QuestionResource
.find({$and: [{status: status}, {"created_at": condition}]})

第一个案例“今天”的结果

[
 {
  "_id":"564717725971cffc2309e7a8",
  "title":"asdasdas",
  "text":"dasdasdasd",
  "created_at":"2015-11-14T11:13:54.823Z"
 },                   
 {
  "_id":"5637611ce6dafbf02af3c4b4",
  "title":"fffffff",
  "text":"asdasdasdasdasdasd", 
  "created_at":"2015-11-13T13:11:56.103Z"
 }
]

第二行不应在此数组中。

另一个案例“昨天

[

]

问题集合包含 20 多行 created_at 本周不同时间。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js mongodb mongoose momentjs


    【解决方案1】:

    您的查询都不保证返回今天或昨天的条目,如果这是您想要完成的。否则,它们会按照所写的那样完美运行。

    您的今天查询返回从调用时的小时/分钟/秒,但昨天,到当前小时/分钟...明天的所有记录。这就是为什么你会得到昨天的日期。如果您只想要今天的记录,则需要将 $gt 条件设置为昨天的实际结束(或今天的开始)。您可以为此使用 moment().endOf('day') 函数。

    您昨天的条件类似地工作,因为它们在两天前和一天前的当前小时/分钟时间之间进行搜索。您可能没有该范围内的任何数据。您还需要将 $gt 和 $it 日期设置为当天结束。

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 2018-04-10
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多