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:获取***文档的主要内容,如果未能解决你的问题,请参考以下文章