2017-10-09 93 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,我還在做一項研究。 :-) 謝謝您的幫助。 –