2015-03-25 174 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 
)