列表天发生在数据集中
我有这个庞大的数据集,每个条目都有一个日期时间字段。数据被不规则地插入。例如:列表天发生在数据集中
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]
这是可能的,如果是这样:我怎样才能做到这一点?
有一个“独特”的命令,具有外壳包装,可以使用这样的:如果你不是从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]}}]
我现在正在看那个,但问题是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
订购的每一天的文档数的结果,降。
您的日期时间字段的数据类型是字符串还是日期? – JohnnyHK
它的一个日期对象 – Diederik