我有一个历史记录集合,每个记录代表一个带有主机名的device
并包含当时有关该设备的指标。每约5分钟会创建一条新记录,并将其添加到此集合中。
我正在尝试创建一个视图,该视图将按主机名对记录进行分组,对它们进行排序,并且仅包含2条最新记录。
我当前使用的管道为我提供了每个主机名的最新报告,但我需要2个最新报告。
如何限制分组,以便每个主机名仅添加最近的2条记录(或n条最近的记录)?
还是有另一种方式来获得这个?
db.getCollection("reports").aggregate(
[
{
"$sort" : {
"timestamp" : -1.0
}
},
{
"$limit" : 10000.0
},
{
"$group" : {
"_id" : {
"hostname" : "$hostname"
},
"timestamp" : {
"$max" : "$timestamp"
},
"history" : {
"$push" : "$$ROOT"
}
}
},
{
"$redact" : {
"$cond" : [
{
"$eq" : [
"$timestamp",
"$$ROOT.timestamp"
]
},
"$$DESCEND",
"$$PRUNE"
]
}
}
],
{
"allowDiskUse" : true
}
);