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"
}
},
])
按降序对 timestamp
键进行排序以提高查询性能。
如果集合中的文档数量较少,我建议您将 $sort
和 $limit
阶段替换为 $group
阶段,并使用 [=15 找到最大值=] 累加器.
我无法在 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"
}
},
])
按降序对 timestamp
键进行排序以提高查询性能。
如果集合中的文档数量较少,我建议您将 $sort
和 $limit
阶段替换为 $group
阶段,并使用 [=15 找到最大值=] 累加器.