【问题标题】:Return mongodb queries who have their due date + 12 hours?返回到期日期 + 12 小时的 mongodb 查询?
【发布时间】:2016-02-11 05:38:10
【问题描述】:

我有具有 2 个参数的事件对象: 'at' 表示他们何时开始, '到期'当他们结束时

这是数组的结构,非常简单:

{
   "name" : "war machine",
   "due" : ISODate("2015-11-09T15:30:00.000Z"),
   "at"  : ISODate("2015-11-09T11:30:00.000Z"),
}

如果可能的话,我想要一个查询:

1) 返回“at”时间低于 Date.now 的事件。 这个很简单:

this.model('Ev').find(
    {at:{$lt:Date.now()}
}).exec();

2) 返回比现在低dueDate + 12 小时的那些。 这意味着如果现在到期的事件,它仍然会在接下来的 12 小时内为我返回这个对象。

例如,如果我只执行第一个查询而不是使用 javascript:

var dueTime = 43,200,000; // 12 hours in millseconds
  eventsReturned.forEach(function(e){

            if ( Date.now() - event.due.getTime() < dueTime ) {
               //This event should return
            }
        });

我有我想要的结果,我如何在不涉及 javascript 的查询中这样做?

【问题讨论】:

    标签: mongodb performance mongoose database


    【解决方案1】:

    如果 "Date.now() - event.due.getTime()

    Date.now() - event.due.getTime() < dueTime
    =>
    Date.now() < dueTime + event.due.getTime()
    =>
    Date.now() - dueTime < event.due.getTime()
    =>
    event.due.getTime() > Date.now() - dueTime
    

    和最后一行一样

    timeWindow = 12 * 60 * 60000
    this.model('Ev').find(
        {due:{$gt:(Date.now() - timeWindow)}
    }).exec();
    

    另外作为一个附注,因为我不确定你期望它返回什么,它总是会在当前时间小于“event.due.getTime() + 12hrs”时返回事件,即,

    at                due     due+12hrs
    |------------------|---------|
                              <--
    

    但是,如果您希望它返回到期但尚未“到期+12 小时”的事件,那么只需添加另一个查询参数:

    timeWindow = 12 * 60 * 60000
    this.model('Ev').find(
        {due:{$gt:(Date.now() - timeWindow)},
        {due:{$lt:Date.now()}}
    }).exec();
    

    应该是:

    at                due     due+12hrs
    |------------------|---------|
                        -->   <--
    

    【讨论】:

      【解决方案2】:

      3*24*60*60000 = 3 天

      所以

      12*60*60000 = 12 小时

      dueDate = date.Now() + (12*60*60000);

      this.model('Ev').find(
          {at:{$lt:dueDate}
      }).exec();
      

      我个人没有测试过代码。这样做,让我知道它是否有效:)

      【讨论】:

      • 不,不是现在 +12,我需要活动的截止日期! + 12...如果这么简单我就不会问了
      • 为什么不在查询本身中添加 + 12hr。 this.model('Ev').find( {at:{$lt:dueDate +( )} }).exec();
      • 我不认为你理解我的问题,在每个对象中我都有一个截止日期,我只需要显示那些有(event.dueDate + 12 hours)
      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 2021-10-13
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多