在数据库中有如下文档, 数据量在100w. imageID是镜像id唯一表示镜像, scantime是信息插入时间, info信息。
希望得到所有镜像的最新插入的信息,如何聚合效率比较高
{
"imageID":string
"scamtime": int64
"info": string
}
参考GPT的内容和自己的思路:
针对这个问题,可以使用聚合查询和索引优化来提高效率。以下是一些建议:
db.collection.aggregate([
{
$sort: { "scantime": -1 }
},
{
$group: {
_id: "$imageID",
scantime: { $first: "$scantime" },
info: { $first: "$info" }
}
}
])
db.collection.createIndex({ "imageID": 1, "scantime": -1 })
查询imageID的不同取值,将取值分成多个批次。
对于每个批次,查询该批次中imageID的最新插入信息。
将所有批次的结果合并,得到所有镜像的最新插入信息。
以上是一些提高效率的建议,实际上可以根据数据量和查询需求进行调整和优化。
mongo聚合中group的性能太差 该性能问题最终未能通过优化aggregate语句解决。
解决方案:分表. 对数据表预处理 将需要的数据另存一张表