排序在聚合mongodb中不起作用

时间:2020-05-13 05:06:28

标签: node.js reactjs database mongodb mongoose

我的MongoDB查询如下。根据{{​​1}}对数据进行排序无法正常工作。请帮助我解决问题。在MongoDB中激发查询后,我已附加了实际输出和预期输出。而且我也想从最近7天开始逐日计数。

//我的查询如下。请调查一下。

createdat

输出:-

User.aggregate([{
    $match: {
      createdAt: {
        $gte: new Date("2016-01-01")
      } 
    } 
  }, { 
    $group: {
      _id: { 
        "year":  { "$year": "$createdAt" },
        "month": { "$month": "$createdAt" },
        "day":   { "$dayOfMonth": "$createdAt" }
      },
      count:{$sum: 1}
    }
  },{"$sort": {"createdAt": 1}}]).exec(function(err,data){
    if (err) {
      console.log('Error Fetching model');
      res.status(500).send();
    } else {
      res.send(data);
    }
  });

预期输出:-

[
    {
        "_id": {
            "year": 2020,
            "month": 5,
            "day": 12
        },
        "count": 2
    },
    {
        "_id": {
            "year": 2020,
            "month": 5,
            "day": 7
        },
        "count": 2
    },
    {
        "_id": {
            "year": 2020,
            "month": 5,
            "day": 13
        },
        "count": 3
    }
]

1 个答案:

答案 0 :(得分:0)

如评论中所述,您在createdAt阶段吞下了$group

因此,最简单的方法是将$dateToStringcreatedAt一起使用。然后可以使用$sort

User.aggregate([
  {
    "$match": {
      "createdAt": {
        "$gte": new Date("2016-01-01")
      }
    }
  },
  {
    "$group": {
      "_id": {
        "$dateToString": { "date": "$createdAt", "format": "%d-%m-%Y" }
      },
      "count": { "$sum": 1 }
    }
  },
  { "$sort": { "_id": 1 } }
]).exec(function (err, data) {
  if (err) {
    console.log("Error Fetching model");
    res.status(500).send();
  } else {
    res.send(data);
  }
})