Arrays 月级和年级的聚合,也可以在MongoDB中找到平均值
解释:我想找到20182021和2020年值的平均值。年和月将使用查询参数传递。 此外,如果完整年份不可用,则在月份级别上查找平均值,然后在月份级别上查找平均值,该月份也将从查询参数中传递 从查询参数中,如果用户将月份作为参数,则平均值的结果为月份级别。 如果用户给出一年或多年,聚合将为年级别 查询参数如下拉列表所示Arrays 月级和年级的聚合,也可以在MongoDB中找到平均值,arrays,mongodb,mongoose,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,解释:我想找到20182021和2020年值的平均值。年和月将使用查询参数传递。 此外,如果完整年份不可用,则在月份级别上查找平均值,然后在月份级别上查找平均值,该月份也将从查询参数中传递 从查询参数中,如果用户将月份作为参数,则平均值的结果为月份级别。 如果用户给出一年或多年,聚合将为年级别 查询参数如下拉列表所示 时基选择器(月、年) 年份基准选择器201820152016 月基准选择器(所有月份,12、11、…08、…03、01) 如果解释不清楚,请告诉我。提前谢谢 {
- 时基选择器(月、年)
- 年份基准选择器201820152016
- 月基准选择器(所有月份,12、11、…08、…03、01)
如果解释不清楚,请告诉我。提前谢谢
{
"data": {
"2018-05-11": {
"12": 12.4,
"00": 11.3
},
"2018-12-31": {
"12": 12.4,
"06": 13
},
"2021-05-10": {
"00": 11.3,
"06": 13
},
"2021-05-11": {
"12": 12.4,
"00": 11.3,
"06": 13
},
"2021-05-13": {
"12": 6,
"06": 13
},
"2020-06-01": {
"12": 3.4,
"09": 1.8
},
"2020-06-15": {
"12": 3.9,
"09": 11.8
}
}
}
将$objectToArray
对象转换为数组键值格式数据
迭代上述转换数组的循环$filter
- 检查
$和
条件
从字符串日期获取$toDate
数据
选择从日期算起的月份,$month
选择年份$year
如果月份在月份数组中,年份在年份数组中,则签入条件$in
从键值数组转换回对象$arrayToObject
我想这是您的预期结果,您能出示实际文件吗。。和查询参数示例输入..谢谢评论,是的,我可以告诉你,有一个下拉列表过去3年、过去5年、过去10年、过去3个月、过去6个月、过去9个月,我想使用MongoDB月和年聚合,但不清楚如何使用这些值直到不清楚,只需在问题中添加参数和可能的值,以及数据库中的示例文档,我已经发布的示例文档<代码>-参数为下拉列表
-
时基选择器(月、年)-
年基选择器201820152016-
月基选择器(所有月,12,11,…08,…03,01)这是收集中可用的数据
键吗?但2021年的平均值在哪里?请发布您的预期结果..我只是更改了一点点数据结构,您现在可以检查吗?谢谢
var years = [2021];
var months = [5];
db.collection.aggregate([
{
$project: {
data: {
$arrayToObject: {
$filter: {
input: { $objectToArray: "$data" },
cond: {
$and: [
{ $in: [{ $year: { $toDate: "$$this.k" } }, years] },
{ $in: [{ $month: { $toDate: "$$this.k" } }, months] }
]
}
}
}
}
}
}
])