mongodb:创建历史记录集中的2个最新文档的视图

时间:2019-05-22 11:20:16

标签: database mongodb mongodb-query aggregation-framework

我有一个历史记录集合,每个记录代表一个带有主机名的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
    }
);

0 个答案:

没有答案