2015-06-02 24 views
0
{ 
    "_id" : ObjectId("55115e69288dbca12d2ed079"), 
    "gameId" : "acadcf1a-b557-4ef9-ab3b-636e1f7f909f", 
    "sportName" : "NCAAMB", 
    "scheduleType" : "days", 
    "status" : "closed",//enumeration : Inprogress, completed,closed 
    "scheduledOn" : ISODate("2015-03-12T22:30:00Z"), 
    "year" : 2014, 
    "season" : "CT", 
    "week" : null, 
    "homeTeam" : { 
     "name" : "Indiana Hoosiers", 
     "nameCode" : "IND" 
    }, 
    "awayTeam" : { 
     "name" : "Northwestern Wildcats", 
     "nameCode" : "NW" 
    } 
} 
{ 
    "_id" : ObjectId("55115e69288dbca12d2ed0a3"), 
    "gameId" : "098a3888-ff77-469c-a762-e883570d8a16", 
    "sportName" : "NCAAMB", 
    "scheduleType" : "days", 
    "status" : "closed", //enumeration : Inprogress, completed,closed 
    "scheduledOn" : ISODate("2015-03-13T22:30:00Z"), 
    "year" : 2014, 
    "season" : "CT", 
    "week" : null, 
    "homeTeam" : { 
     "name" : "Maryland Terrapins", 
     "nameCode" : "MD" 
    }, 
    "awayTeam" : { 
     "name" : "Indiana Hoosiers", 
     "nameCode" : "IND" 
    } 
} 

內的子查詢我在MongoDB中「得分」的收集,我想找個地方要麼homeTeam或awayTeam nameCode應該是「IND」的數據。和MongoDB的:我們是如何寫的MongoDB

  1. 「scheduledOn」應大於當前的時間和小於CURRENT_TIME + 48小時, 如果結果計數爲0,上述標準的基礎上,則第二條件將是

  2. 「狀態」應爲‘INPROGRESS’ 如果再導致計數爲0,第二標準的基礎上,那麼第三個條件將

  3. 由隊出戰的基礎上,最後一場比賽‘scheduledOn’

如果我們沒有結果,響應空白陣列或返回完整的數據

回答

2

考慮使用aggregation framework在下面的管道應該得到你想要的結果。該管道具有根據其是

找到其中任一homeTeam或awayTeam nameCode應該是「IND」

接下來$match標準的數據的第一標準,其過濾的文件的初始$match操作階段:

「scheduledOn」應大於當前的時間和小於CURRENT_TIME + 48小時

要獲得0的結果計數,在$match運營商應該有一個日期範圍查詢,現在的時間間隔超出了+48小時,因此情況反轉;您查找的日期超出該範圍的文檔將沿聚合流進行。

以下條件:

「狀態」應爲「INPROGRESS」

也被描述相反,讓你進一步得到一些文件下來管道從而status不應該等於「進行中」。

最後一個條件

被球隊「scheduledOn」

的基礎上打的最後一場比賽中,然後通過$sort(用降序指定)+ $limit運營商滿意。在最後你應該得到的東西是這樣的:

var start = new Date(), 
    end = new Date(); 
end.setHours(end.getHours()+48); 

db.score.aggregate([ 
    { 
     "$match": { 
      "$or": [ 
       { "homeTeam.nameCode": "IND" }, 
       { "awayTeam.nameCode": "IND" } 
      ] 
     } 
    }, 
    { 
     "$match": { 
      "scheduledOn": { "$lt": start, "$gt": end } 
     } 
    }, 
    { 
     "$match": { 
      "status": { "$ne": "Inprogress" } 
     } 
    }, 
    { "$sort": { "scheduledOn": -1 } }, 
    { "$limit": 1 } 
]) 

用於調試管道是產生意外結果提示是隻有第一管道運營商運行的聚集。如果這給出了所需的結果,請添加下一個。