Mongodb:获取***文档

Posted

技术标签:

【中文标题】Mongodb:获取***文档【英文标题】:Mongodb: Get top documents 【发布时间】: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 行,但这实际上并不能满足要求,我需要知道顶部元素的数量等。

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

提前谢谢你!

【问题讨论】:

【参考方案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 上的索引可以使初始排序/限制闪电般快速。

以上是关于Mongodb:获取***文档的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb如何获取单个文档的大小?

如何在 mongoDB 中获取最后 50 个文档? [复制]

Mongodb聚合:获取引用的文档字段值

MongoDB:如何获取包含最接近给定数字的数值的文档

Mongoose/MongoDB:获取倒数第二个文档

在 Java 上按 ID 获取 MongoDB 文档