返回mongodb查询谁到期日期+ 12小时?

时间:2015-11-10 10:54:36

标签: mongodb performance mongoose database

我有两个参数的事件对象: '在'当他们开始时, '由于'当他们结束时

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

{
   "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)返回比现在低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的查询中这样做?

2 个答案:

答案 0 :(得分:3)

如果&#34; Date.now() - event.due.getTime()&lt; duetime参数&#34;返回正确的输出,可以按如下方式表达:

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();

另外作为旁注,因为我不确定你期望它返回什么,它会在当前时间小于&#34; event.due.getTime()+ 12hrs&#时返回事件。 34;,即

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

但是,如果你希望它返回到期但尚未到期的事件&#34;到期+ 12小时&#34;然后只需添加另一个查询参数:

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

这将是:

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

答案 1 :(得分:-2)

3 * 24 * 60 * 60000 = 3天

所以

12 * 60 * 60000 = 12小时

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

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

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