2017-03-08 17 views
0

流星服務器代碼嘗試按月份對文檔進行分組。以便每個月的所有文件的數量都被給出。
該文件有createdAt = Date.now();財產和氣象:總計 安裝。有什麼建議麼? thx由Date.now()屬性值上的月份組成的流星聚合組

我認爲:
1)變換集合添加新屬性'MMYYYY:6位數字',並由它組。

回答

1

如果你打算經常聚合,你的考慮是一個好的選擇。如果您在創建文檔時在文檔中寫入年份和月份字符串,它肯定會更快。請記住,如果您修改相應的日期字段,則必須記住保持這些字符串處於最新狀態。

如果你不會經常聚合,那麼這可能不值得。只需將您的紀元時間值轉換爲新的Date對象,並在您的聚合管道中利用Date聚合運算符。這是一個例子。

var Metrics = new Mongo.Collection('metrics'); 

Metrics.aggregate([ 
    {$project: { 
    createdAtDate: { $add: [new Date(0), "$createdAt"] } 
    }}, 
    {$project : { 
    year : {$year : "$createdAtDate"}, 
    month : {$month : "$createdAtDate"} 
    }}, 
    {$group : { 
    _id : {year : "$year", month : "$month"}, 
    count : {$sum : 1} 
    }} 
]); 

如果你有一個日期字符串(這裏稱爲「createdAtString」文檔場MMYYYY)去那麼你的管道應該是這樣吧。

var Metrics = new Mongo.Collection('metrics'); 

Metrics.aggregate([ 
    {$group : { 
    _id : "$createdAtString", 
    count : {$sum : 1} 
    }} 
]); 
+0

使用第一個formate,服務器錯誤說「MongoError:無法從BSON類型NumberDouble轉換爲日期」 –

+0

@FredJ。聽起來你在yiur集合中有一個或多個文檔,它的createdAt值不是日期對象。你可以驗證所有的文檔在你的集合中都有一個真實的createdAt日期 – jordanwillis

+0

正如我的問題所述,所有的createdAt都是用'Date.now()'創建的,這是紀元時間。 –