2015-05-09 27 views
0

我有這個龐大的數據集,每個條目都有一個日期時間字段。數據被不規則地插入。例如:列表天發生在數據集中

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

回答

0

有一個「獨特」的命令,具有外殼包裝,可以使用這樣的:如果你不是從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

0

假設一個名爲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訂購的每一天的文檔數的結果,降。