2013-07-02 88 views
2

我對當前正在運行的項目有一個mongo問題,需要您的幫助。按mongodb集合中的日期分組

下面是我的問題:

我有我的存儲用戶的日誌數據作爲樣本:

db.visitors收集

[ 
    { 
     uid: "0001", 
     logPath: "/home", 
     logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0002", 
     logPath: "/", 
     logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0001", 
     logPath: "/product", 
     logTime: "Mon Dec 27 2010 18:51:23 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0001", 
     logPath: "/order", 
     logTime: "Mon Dec 28 2010 18:51:23 GMT+0000 (UTC)" 
    } 
] 

,我需要我的羣訪用戶通過日期(在2010年12月28日星期一至2010年12月27日星期一之間)

嘗試查找具有uid的用戶的日誌爲0001和組:

[ 
    { 
     date: "Mon Dec 28", 
     log: [ 
      { 
       logPath: '/order' 
      } 
     ] 
    }, 
    { 
     date: "Mon Dec 27", 
     log: [ 
      { 
       logPath: '/home' 
      }, 
      { 
       logPath: '/product' 
      } 
     ] 
    } 
] 

請指導我怎麼做我這組

+0

日期真的是字符串嗎? – Sammaye

+0

Date對象中的所有日期 –

回答

1
db.aggregate([ 
    {$match: {uid: "0001", logTime: {$gte: ISODate('Mon Dec 27 2010'), $lt: ISODate("Mon Dec 29 2010")}}}, 
    {$project: 
     {day: {'$dayOfMonth': '$logTime'},month: {'$month':'$logTime'},year: {'$year':'$logTime'} } 
    }, 
    {$group: { 
     _id: {day:'$day',month:'$month',year:'$year'}, 
     log: {$push:{logPath:'$logPath'}} 
    }} 
]) 

類似的東西應該做的伎倆。如果您想僅按月分組,則可以從$group_id中取出day字段。

還有另一種做日期的方式,但我必須承認這種方式可能是目前最簡單的方法。

+0

如果你想 - 你可以省略'{$ project:..}'步驟,因爲'{$ dayOfMonth:...}'操作符等在'{$ group: ...}'。 –

+0

@康拉德迪恩確實,雖然我(個人)認爲看起來很難閱讀 – Sammaye

+0

完全公平。嘿 - 你知道是否有可能在'{$ match:..}'中使用它們嗎?我一直想避免使用ISODate()進行過濾# –