Mongodb: 获取top文档

Mongodb: Get top documents

我无法在 Google 或 SO 上找到问题的答案。

我有一个集合,例如:

{ "_id" : "0", "timestamp" : 160000 }
{ "_id" : "00", "timestamp" : 160000 }
{ "_id" : "000", "timestamp" : 150000 }

而且我想根据 timestamp 获取前几行,而不仅仅是前几行。

例如:

{ "_id" : "0", "timestamp" : 160000 }
{ "_id" : "00", "timestamp" : 160000 }

显而易见的解决方案是按 DESC 排序并获取前 n 行,但这实际上并不能满足要求,我需要知道顶部元素的数量等。

我想获取第一行的时间戳,然后匹配具有该时间戳或其他内容的所有行?

提前致谢!

找到最大值后必须使用自查找对同一个集合进行查找

db.collection.aggregate([
  {
    "$sort": {
      "timestamp": -1
    }
  },
  {
    "$limit": 1
  },
  {
    "$lookup": {
      "from": "collection",
      "localField": "timestamp",
      "foreignField": "timestamp",
      "as": "topTimeStamp"
    }
  },
  {
    "$project": {
      "_id": 0,
      "result": "$topTimeStamp"
    }
  },
  
])

Mongo Sample Execution

按降序对 timestamp 键进行排序以提高查询性能。

如果集合中的文档数量较少,我建议您将 $sort$limit 阶段替换为 $group 阶段,并使用 [=15 找到最大值=] 累加器.