gpt4 book ai didi

mongodb - 按天/月分组,并在 mongo 中取该天/月的平均评分

转载 作者:IT老高 更新时间:2023-10-28 13:22:39 24 4
gpt4 key购买 nike

我在 mongodb 中有这些数据:

[
{
"rating": 4,
"ceatedAt": ISODate("2016-08-08T15:32:41.262+0000")
},
{
"rating": 3,
"createdAt": ISODate("2016-08-08T15:32:41.262+0000")
},
{
"rating": 3,
"ceatedAt": ISODate("2016-07-01T15:32:41.262+0000")
},
{
"rating": 5,
"createdAt": ISODate("2016-07-01T15:32:41.262+0000")
}
]

我需要根据过滤条件获取特定日期/月份的平均评分。如果日期的过滤范围小于一个月,那么它将按天分组。如果日期的过滤范围超过一个月,那么它将按月分组。

这正是我所期待的

[
{
"average": 3.5,
"ceatedAt": "2016-08-08",
"month": "August"
},
{
"average": 4,
"ceatedAt": 2016-07-01,
"month": "July"
}
]

在 mongodb 中怎么做?

最佳答案

要按日/月对文档进行分组并在输出中返回月份键,您需要首先 $project 使用 Date 将关键字段转换为适当的格式运算符,尤其是 $dateToString $month 运算符。

这可以在 $project 中完成 $group 之前的 阶段 步骤,但不是必需的,因为 $group 管道主要容纳 accumulator运营商。

在前面的 $group 管道,您可以按格式化日期键对文档进行分组,使用 $avg 聚合 运算符并使用 $first 从上一个管道中以整数形式返回月份 累加器运算符。

运行以下聚合管道应该会给您想要的结果:

db.collection.aggregate([
{ "$group": {
"_id": {
"$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" }
},
"average": { "$avg": "$rating" },
"month": { "$first": { "$month": "$ceatedAt" } },
} }
])

关于mongodb - 按天/月分组,并在 mongo 中取该天/月的平均评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38897478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com