我具有以下聚合器功能,我没有直接在mongo控制台中触发。我将此聚合器作为查询字符串传递给API。我将直接对以下聚合器进行编码,并将其作为查询字符串传递给get请求。
[
{
"$limit": 500
},
{
"$match": {
"timestamp": {
"$gte": {
"$dte": "2017-07-01"
},
"$lt": {
"$dte": "2020-12-31"
}
}
}
},
{
"$group": {
"_id": { "$year": "$timestamp" },
"scores": { "$push": "$statement.result.score.scaled" },
"duration_seconds": { "$push": "$statement.result.duration_seconds" }
}
},
{
"$project": {
"scores": 1,
"duration_seconds": 1,
"statements_count": 1,
"semester": {
"$cond": [
{
"$lte": [
{
"$month":
{
"$dateFromString": {
"dateString": "$timestamp"
}
}
}, 6
]
}, "Jan", "July"
]
}
}
},
{
"$group": {
"_id": { "semester": "$semester", "year": { "$year": "$timestamp" } },
"avg_score": { "$avg": "$scores" },
"avg_duration": { "$avg": "$duration_seconds" },
"statements_count": { "$sum": 1 }
}
}
]
在这里,我有一个对帐单文档,它有一个timestamp
,它是ISO日期,但为字符串格式。我想按学期对语句进行分组(如果月份为1-6: Jan, 6-12: July
)
这里的问题是我正在使用mongo 3.4.7,而"$dateFromString"
运算符仅在3.6以上版本中可用。所以我得到一个错误。
那么如何在mongo 3.4.7版本中按学期对此分组?
我先按学期分组时面临以下问题。
我的汇总不适用于按学期分组。因为我该如何先使用学期分组,然后进行项目阶段?小组阶段不支持$cond
阶段只能使用的project
等聚合器。
答案 0 :(得分:1)
您可以尝试将$split
的$arrayElemAt
运算符用于索引1以返回月份值。
{"semester":{
"$cond":[
{"$lte":[{"$arrayElemAt":[{"$split":["$timestamp","-"]},1]},"06"]},
"Jan",
"July"
]
}}