2014-12-02 69 views
0

我有一個集合db.activities,其中每個項目有dueDate。我需要在下面的格式,基本上是今天這是由於活動的清單,並在本週呈現數據:按時間段分組的項目

{ 
    "today": [ 
    { _id: 1, name: "activity #1" ... }, 
    { _id: 2, name: "activity #2" ... } 
    ], 
    "thisWeek": [ 
    { _id: 3, name: "activity #3" ... } 
    ] 
} 

我設法通過簡單地在上週的活動查詢爲平面列表,然後做到這一點在客戶端將它們與javascript分組,但我懷疑這是一個非常骯髒的解決方案,並希望在服務器上執行此操作。

回答

1

查閱mongo aggregation pipeline
您的聚合按日期排序,按日期排序,也可以按日期排序/排序。

缺乏,如果你想它會沿着

db.collection.aggregate([{ $match: {"duedate": { "$gte" : start_dt, "$lte" : end_dt} } , 
{ $group: {_id: "$duedate", recordid : "$_id" , name: "$name" }, 
{"$sort" : {"_id" : 1} } ] ); 

線數據方案「全部」記錄刪除$匹配或使用{ $match: {} }作爲一個與find一樣。

在我看來,你不能在一個命令中按天和周來聚合。可以通過使用mongos $ dayOfWeek預測duedate來實現每週一次。沿着

db.collection.aggregate([ 
{ $match: {"duedate": { "$gte" : start_dt, "$lte" : end_dt} } , 
{ $project : { dayOfWeek: { $dayOfWeek: "$duedate" } }, 
{ $group: {_id: "$dayOfWeek", recordid : "$_id" , name: "$name" }, 
{"$sort" : {"_id" : 1} } ] ); 

退房http://docs.mongodb.org/manual/reference/operator/aggregation/dayOfWeek/

的線