2016-01-05 39 views
3
{ 
    "_id" : ObjectId("568b650543712795bf864a45"), 
    "companyId" : "55e2d7cfdc8f74d14f5c900f", 
    "timeStamp" : ISODate("2014-12-03T18:30:00.000Z") 
}, 
{ 
    "_id" : ObjectId("568b650543712795bf864a49"), 

    "companyId" : "55e2d7cfdc8f74d14f5c900f", 
    "timeStamp" : ISODate("2014-12-04T18:30:00.000Z") 
} 

如何按mongodb中的文档按周分组。我需要根据最近7周的文档分组,并根据文档中的“timeStamp”字段进行分组。如何在mongodb中按周按文档分组

+0

你有没有试过聚合框架?既然你使用'group by'我假设你来自sql(https://docs.mongodb.org/manual/reference/sql-aggregation-comparison/)所以在你的情况下,你需要首先''匹配'每个文件其中'timeStamp'是gte'新日期(“2014-11-04”)'(从现在开始7周前),然后''group'''timeStamp' – somallg

回答

5

您可以通过使用聚合操作来实现此目的。在MongoDB中有$ week聚合操作。

首先使用您使用的任何编程语言来确定startDate。

在以下流水线操作中,计算匹配一周的文档数量。你可以在你需要的任何领域/类型的聚合上做到这一点。

pipeline = [ 
    { 
     $match: { 
      timeStamp: {$gt: ISODate(startDate)}, 
     } 
    }, 
    { 
     $group: { 
      _id: {$week: '$timeStamp'}, 
      documentCount: {$sum: 1} 
     } 
    } 
]; 
db.mycollection.aggregate(pipeline) 

对于上述两个文件所指定的结果将是

{ "_id" : 48, "documentCount" : 2 } 

以上_id说,第48周,有两个文件。

通过链接$ week了解mongodb如何计算周数。