2015-03-25 177 views
0

我實際上試圖獲取有關我的應用程序的一些信息。Mongoose,mongodb,壞聚合組合

我必須得到一些日/月/年的信息分組。我有很好的結果屬性,但即使數據庫中沒有任何內容,也會顯示信息。

注意:開始和結束是格式良好的日期。

TraitementNettoyage.aggregate([ 
     {$match: { 'dateEntre': {$gt: start}, 'dateEntre': {$lt: end} }}, 
     {$group: {'_id': {'day': {'$dayOfMonth': '$dateEntre'}, 'month': {'$month': '$dateEntre'}, 'year': {'$year': '$dateEntre'}}, count: {$sum: 1}}} 
    ]).exec((err, res)=> 
console.log res 
) 

我得到這個結果集:

[ 
    { 
     "_id": { 
      "day": 24, 
      "month": 3, 
      "year": 2015 
     }, 
     "count": 2 
    } 
] 

事實是,我有一個關於2015年3月24日沒有在DB。 在我的數據庫中,我只有2組數據和2015-03-23日期。

我應該糾正我的請求得到確切的兩個結果:

[ 
    { 
     "_id": { 
      "day": 24, 
      "month": 3, 
      "year": 2015 
     }, 
     "count": 0 
    } 
] 

[ 
    { 
     "_id": { 
      "day": 23, 
      "month": 3, 
      "year": 2015 
     }, 
     "count": 2 
    } 
] 

編輯:

這裏,與結果$ LTE和$ GTE:

[ 
    { 
     "_id": { 
      "day": 25, 
      "month": 3, 
      "year": 2015 
     }, 
     "count": 2 
    }, 
    { 
     "_id": { 
      "day": 24, 
      "month": 3, 
      "year": 2015 
     }, 
     "count": 2 
    } 
] 

的問題是,計數是不正確的。事實上2015年3月24日的數字應該是2,而2015年3月25日的數字應該是0。

感謝提前

+0

讓你的起點和從23/3/2015或24/3/2015包含結束日期? – Dineshaws 2015-03-25 07:47:37

+0

23/03/2015至23/03/2015和24/03/2015至24/03/2015。問題在於計數實際上不正確: -/ – mfrachet 2015-03-25 08:36:01

+0

請使用$ gte和$ lte。 – Dineshaws 2015-03-25 09:11:12

回答

1

分裂$匹配dateEntre

TraitementNettoyage.aggregate([ 
     {$match: { 'dateEntre': {$gte: start}}}, 
     {$match: { 'dateEntre': {$lte: end}}}, 
     {$group: {'_id': {'day': {'$dayOfMonth': '$dateEntre'}, 'month': {'$month': '$dateEntre'}, 'year': {'$year': '$dateEntre'}}, count: {$sum: 1}}} 
    ]).exec((err, res)=> 
console.log res 
)