2017-06-06 56 views
1

我在做一個聚合,使用$lookup從另一個集合中獲取數據,然後在項目階段使用$filter來過濾新數據。

獲得新的數據我的輸出看起來像在此之後(reservations是我從不同的數據庫中獲取數據):

[0] => stdClass Object 
     (
      [_id] => 592fffe7f509270850281871 
      [name] => Table 1 
      [seats] => 4  
      [reservations] => Array 
       (
        [0] => stdClass Object 
         (
          [_id] => 59367485f5092753f477f2c1 
          [guests] => 3 
          [date] => stdClass Object 
           (
            [$date] => 1496768400000 
            [$unixtime] => 1496768400 
            [_datetime] => 2017-06-06 17:00:00 
           ) 

          [dateString] => 2017-06-06 
          [duration] => 45 
          [startUTime] => 1496761200 
          [endUTime] => 1496763900 
          [tables] => Array 
           (
            [0] => 592fffe7f509270850281871 
            [1] => 592fffe7f509270850281874 
           ) 

          [reservedAt] => stdClass Object 
           (
            [$date] => 1496740997000 
            [$unixtime] => 1496740997 
            [_datetime] => 2017-06-06 09:23:17 
           ) 
         ) 
       ) 
     ) 

現在我要過濾的保留。我有一個名爲reqStartTime的變量和一個名爲reqEndTime的變量。這些是新要求預訂的unixtimes。我想檢查這些值中的任何一個是否在當前預留的startUTimeendUTime之間。

比方說reqStartTime是1496761600和reqEndTime是1496764200.

在項目階段使用$filter

{ 
     '$project' : { 
      name: 1, 
      seats: 1, 
      reservations : { 
       '$filter': { 
        input : "$reservations", 
        as: "res", 
        cond : 
         { '$or' : [ 
          { '$and' : [ 
           { '$gte' : [ reqStartTime, "$$res.startUTime" ] }, 
           { '$lte' : [ reqStartTime, "$$res.endUTime" ] } 
          ]}, 
          { '$and' : [ 
           { '$gte' : [ reqEndTime, "$$res.startUTime" ] }, 
           { '$lte' : [ reqEndTime, "$$res.endUTime" ] } 
          ]}  
         ]} 
       } 
      } 
     } 
    } 

的問題是,這會過濾掉所有預訂 - 輸出始終是一個空數組。我已經測試了手動設置變量reqStartTimereqEndTime以確保它們在範圍內,但沒有運氣。

+0

如果你可以顯示'$ lookup'填充的數組條目的狀態,那麼會更好,所以有一些數據要測試條件。你正在尋找「重疊」的權利?這是什麼情況?提供的參數「重疊」還是「不重疊」?在後者,這可能意味着「預訂時間」是好的,並且「$ filter」的「空」結果是不希望的?因此意思是「不重疊」。 –

+0

@NeilLunn我正在尋找'overlapps'的確 - 我試圖在沒有重疊的情況下得到一個空數組,並且如果有任何重疊的保留,就得到重疊的保留。 但是,無論我嘗試使用這些數據,我總是會得到一個空數組(即使應該有重疊)。 –

+0

就像我說的那樣,*「你能告訴我們一些數據嗎?」*然後,這成爲我們可以可靠地測試結果的情況。 –

回答

0

查詢結果是有效的 - 問題是我的變量被轉換爲字符串。將它們轉換回整數解決了問題。

相關問題