列表天发生在数据集中

问题描述:

我有这个庞大的数据集,每个条目都有一个日期时间字段。数据被不规则地插入。例如:列表天发生在数据集中

2015-04-20 : 500 entries, 
2015-04-23 : 300 entries, 
2015-05-01 : 600 entries 

事情是,我不知道这些活跃的日子是什么时候。我想是返回某种含有发生在数据库中的所有天阵,像这样一个MongoDB的查询:

['2015-04-20, 
'2015-04-23, 
'2015-04-23, 
'2015-04-25, 
'2015-05-01, 
'2015-05-05, 
'2015-05-09] 

这是可能的,如果是这样:我怎样才能做到这一点?

+0

您的日期时间字段的数据类型是字符串还是日期? – JohnnyHK

+0

它的一个日期对象 – Diederik

有一个“独特”的命令,具有外壳包装,可以使用这样的:如果你不是从shell中运行它

db.collection.distinct(dateFieldName, query) 

,检查驱动程序是否包装此命令,如果不是你可以直接使用命令:

{ distinct: "<collection>", key: "<field>", query: <query> } 

http://docs.mongodb.org/manual/reference/command/distinct/#dbcmd.distinct

如果时间戳字段需要一些additinal处理,你可以使用聚合框架。

db.collection.aggregate([{$group: {_id: $substr: ["$timestamp", 0, 10]}}] 

http://docs.mongodb.org/v2.6/core/aggregation-introduction/

+0

我现在正在看那个,但问题是datetime字段类似'2015-04-29T09:54:36Z',所以运行一个独特的表示只显示所有独特的日期时间。 – Diederik

假设一个名为dateField字段包含Date值,可以使用聚合date operators$group做到这一点。

这是最简单的,如果你正在使用蒙戈3.X其中$dateToString运营商可供选择:

db.dates.aggregate([ 
    {$group: { 
     _id: {$dateToString: {format: '%Y-%m-%d', date: '$dateField'}}, 
     count: {$sum: 1} 
    }}, 
    {$sort: {count: -1}} 
]) 

此前3.0,您需要使用多个日期运营商拼凑日到_id时分组:

db.dates.aggregate([ 
    {$group: { 
     _id: { 
      year: {$year: '$dateField'}, 
      month: {$month: '$dateField'}, 
      day: {$dayOfMonth: '$dateField'} 
     }, 
     count: {$sum: 1} 
    }}, 
    {$sort: {count: -1}} 
]) 

在这两种情况下,注意使用$sort订购的每一天的文档数的结果,降。