我有mongodb中的数据:
{
"_id" : abc,
"someField" : [
11.5,
8,
7,
9,
9.5,
5,
5.5,
10,
8,
9,
5,
6,
8,
8.5,
3.5,
4,
11.5,
6,
5.5,
8,
10.5,
10.5,
5.5,
4,
11.5,
9.5,
8.5,
4.5 ],
firstDate : ISODate("2017-03-10T12:00:00.000Z")
}
我使用索引来使用firstdate获取特定日期。
数据每六个小时存储一次,我可以将这些数据按每4个值分组,因为它将是一天。
聚合后,它应该是:
{
"_id" : abc,
"someField" : [
11.5,
10,
9,
8.5,
11.5,
10.5,
11.5
]
}
答案 0 :(得分:2)
您可以在下面进行汇总:
db.col.aggregate([
{ $match: { _id: "abc" } },
{
$project: {
items: {
$map: {
input: { $range: [ 0, { $ceil: { $divide: [ { $size: "$someField" }, 4 ] } } ] },
as: "index",
in: {
$max: {
$slice: [ "$someField", { $multiply: [ "$$index", 4 ] }, 4 ]
}
}
}
}
}
}
])
$map
在这种情况下采用7
元素数组,即数组的$size除以4.因此,您将得到[0,1,2 .., 7]
。然后,您可以使用该数组作为$slice的输入来获取4元素数组。每个数组都可以是$max的输入。
结果你会得到:
{ "_id" : "abc", "items" : [ 11.5, 10, 9, 8.5, 11.5, 10.5, 11.5 ] }