猫鼬,mongodb,坏聚集

时间:2015-03-25 07:13:41

标签: node.js mongodb mongoose

我实际上是想获取有关我的应用的一些信息。

我必须按日/月/年获得一些信息分组。我有很好的结果属性,但即使数据库中没有任何内容,也会显示信息。

注意:开始和结束都是格式良好的日期。

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-03-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。

感谢您提前

1 个答案:

答案 0 :(得分:1)

拆分dateEntre的$ match

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
)