【问题标题】:Mongodb: Get top documentsMongodb:获取顶级文档
【发布时间】:2022-01-01 04:36:55
【问题描述】:

我无法在 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 行,但这实际上并不能满足要求,我需要知道顶部元素的数量等。

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

提前谢谢你!

【问题讨论】:

    标签: database mongodb max aggregation


    【解决方案1】:

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

    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 阶段,并使用$max 累加器找到最大值。

    【讨论】:

    • 太棒了,谢谢你,一旦我测试它,我会接受!
    • {timestamp:-1} 上的索引可以使初始排序/限制闪电般快速。
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 2014-02-02
    • 2017-01-05
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2011-10-19
    相关资源
    最近更新 更多