2014-12-02 34 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/

的线