【问题标题】:Getting average values per day in MongoDB using Moongose使用 Mongoose 在 MongoDB 中获取每天的平均值
【发布时间】:2018-10-26 18:54:20
【问题描述】:

我需要从 mongoDB 获取一些数据,我正在使用 moongose。集合中的元素(文档)很简单,如下所示:

{"created_at":"2018-05-16T15:58:24.979Z","_id":"5afc5520b237951510da6a0c","value":15.5,"__v":0}

我需要从今天开始,在前一周,每天获取“值”的平均值,例如:

今天:星期一

我想要一个像这样的数组 [1,2,3,4,5,6,7,8] 其中:

上周一平均值 = 1

上周二平均值 = 2

....

今日平均值 = 8

有没有办法直接在猫鼬中做到这一点?

【问题讨论】:

    标签: mongodb mongoose aggregation-framework


    【解决方案1】:

    您应该进行包含以下步骤的聚合:

    1. 分解created_at字段,分别得到月、月、年的日期,
    2. 获取每天value 的平均值。

    这是代码:

    YourCollection.aggregate([
    {
       $project:
         {
           year: { $year: "$created_at" },
           month: { $month: "$created_at" },
           day: { $dayOfMonth: "$created_at" },
           _id: "$id",
           value: "$value"
         }
    },
    {
       $group:
         {
           year: "$year",
           month: "$month",
               day: "$day",
               avgValue: { $avg: "$value" } 
             }
        }
    ]);
    

    【讨论】:

    • 嗨,非常感谢。我是这样做的: MyCollection.aggregate() .group({ _id: { year: { $year: "$date" }, month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, week: { $week: "$date" }, weekDay: { $dayOfWeek: "$date" }, }, avg: { $avg: "$temp" }, count: { $sum: 1 } }) .sort('-_id') .limit(8)
    • 我很高兴它对你有用?。你做得比我好
    猜你喜欢
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多