2017-10-09 67 views
0

我们有流星应用程序,我们使用mongodb作为数据库。现在,由于VIEW功能已经在MongoDB上可用,我们试图使用它来生成报告。但是,我们在收集日期字段和当前日期方面存在问题,因此我们甚至无法使用$ project下的mongodb聚合检索当前日期字段,因为我们不知道获取当前日期的正确语法。我们的目标是,因为它正在使用视图,我们希望将新的Date()(这是今天的日期代码)替换为当前的mongodb日期方法。无法在MongoDB中查看当前日期查看查询

"waiting_for_appointment" : { 
      $cond : { 
       if: { $eq: ["$current_status", "Waiting For Appointment"]}, 
       then: { 
        $cond : { 
         if: {$gt: [{$subtract: [ new Date(), "$statuses.waiting_for_appointment.from_date" ]}, 0]}, 
         then: { 
          $cond: { 
           if: {$gt: [{$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}, 0]}, 
           then: {$multiply : [{ 
            $divide: [{$subtract: [ new Date(), "$statuses.waiting_for_appointment.from_date" ]}, {$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}] 
            }, 100] 
           }, 
           else: 0 
          } 
         }, 
         else: 0 
        } 
       }, 
       else: -1 
      } 
     }, 

查询工作正常,但是当我再次编辑视图的查询,我发现它转换为静态日期,日期时被查询被保存。这是我们在保存查询并编辑回来后得到的。

ISODate("2017-10-09T02:12:42.282+0000") 

这就是为什么如果日期发生变化,查询将不会生效。

在此先感谢。

回答

0

一般来说,当你设置Object Literals(在这种情况下你正在用这个整个查询)时,对象中的所有被调用的函数在对象被实例化时被调用。

注:我没有通过你的复杂查询。我只是在谈论更新日期并假设查询结构合理的问题。

我不知道你的用例,但如果你可以调用它作为一个函数而不是一个对象,那么在调用的时候可以非常容易地获得更新的参数。

const someObj = { 

    "waiting_for_appointment" : function(currentDate) { 
     $cond : { 
      if: { $eq: ["$current_status", "Waiting For Appointment"]}, 
      then: { 
       $cond : { 
        if: {$gt: [{$subtract: [ currentDate, "$statuses.waiting_for_appointment.from_date" ]}, 0]}, 
        then: { 
         $cond: { 
          if: {$gt: [{$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}, 0]}, 
          then: {$multiply : [{ 
           $divide: [{$subtract: [ currentDate, "$statuses.waiting_for_appointment.from_date" ]}, {$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}] 
           }, 100] 
          }, 
          else: 0 
         } 
        }, 
        else: 0 
       } 
      }, 
      else: -1 
     } 
    }, 

} 

然后someObj['waiting_for_appointment'](new Date())将返回带有当前日期时间的查询对象。

+0

嗨@Dom,感谢您的回复。只是想澄清,如果你在做mongoDB的VIEW功能呢?该视图功能,我们可以存储一个mongodb语句,例如聚合类型,或者我们可以用我们的应用程序调用meteor应用程序作为使用find方法的集合。我们的目标是如何在mongodb视图上存储不会转换为静态的实际日期。就像我上面解释的那样,我们在声明中使用'new Date()',但在保存该语句后,它会转换为静态为'ISODate(“2017-10-09T02:12:42.282 + 0000”) '。 –

+0

啊,对。您可能需要删除并重新创建视图才能获得预期结果,这可能与您首先想要使用视图的原因相矛盾。如果我找到办法做到这一点,我会告诉你。 –

+0

谢谢@Dom,我还在做一项研究。 :-) 谢谢您的帮助。 –