【问题标题】:MongoDB : count documents for each year using MongooseMongoDB:使用 Mongoose 计算每年的文档
【发布时间】:2021-08-15 11:56:19
【问题描述】:

我的文档有这样的结构:

{
  _id : ObjectId("60ae47705c4eb3d38a25b8c6")
  number : 784
  date : 2019-06-18T21:59:39.000+00:00
  price : 5715
}

我想像这样检索每年的文件总和:

{
  ...
  2019 : 28
  2020 : 35
  2021 : 15
}

这是我第一次使用 noSQL,所以我有点迷茫。

我试过这个:

Offre.aggregate([
    {"$facet" : {
            "2016" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2015,31,12), "$lt" : new Date(2017,1,1)}}},
                {"$count" : "2016"}
            ],
            "2017" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2016,31,12), "$lt" : new Date(2018,1,1)}}},
                {"$count" : "2017"}
            ],
            "2018" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2017,31,12), "$lt" : new Date(2019,1,1)}}},
                {"$count" : "2018"}
            ],
            "2019" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2018,31,12), "$lt" : new Date(2020,1,1)}}},
                {"$count" : "2019"}
            ],
            "2020" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2019,31,12), "$lt" : new Date(2021,1,1)}}},
                {"$count" : "2020"}
            ],
            "2021" : [
                {"$match" : {"dateLivraison" : {"$gte" : new Date(2020,31,12), "$lt" : new Date(2022,1,1)}}},
                {"$count" : "2021"}
            ],

        }},
    {"$project" : {
        "2016": {"$arrayElemAt" : ["$2016.2016",0]},
        "2017": {"$arrayElemAt" : ["$2017.2017",0]},
        "2018": {"$arrayElemAt" : ["$2018.2018",0]},
        "2019": {"$arrayElemAt" : ["$2019.2019",0]},
        "2020": {"$arrayElemAt" : ["$2020.2020",0]},
        "2021": {"$arrayElemAt" : ["$2021.2021",0]}
        }}
],   (error,data) =>{
    if(error){
        console.log(error);
    }else{
        console.log(data);
        res.json(data);
    }
})

但它给了我一个空的结果

(对不起我的英语)

【问题讨论】:

    标签: javascript node.js mongodb mongoose nosql


    【解决方案1】:

    我在这里找到了解决方案:https://kb.objectrocket.com/mongo-db/how-to-use-mongoose-to-group-by-date-1210

    所以对于我的问题,我使用了这个:

    Offre.aggregate( [
        {
            $group: {
                _id: { $dateToString: { format: "%Y", date: "$dateLivraison" } },
                total: {
                    $sum: 1
                }
            }
        }
    ],   (error,data) =>{
        if(error){
            console.log(error);
        }else{
            console.log(data);
            res.json(data);
        }
    })
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2015-05-25
      相关资源
      最近更新 更多