【发布时间】:2014-05-19 17:10:11
【问题描述】:
我想对 mongodb 集合执行排序查询,查找特定项目并在结果集中检索其索引。 例如,查找所有学生,按年级降序排序,得到学生“John Connor”的位置。就像在班上获得约翰康纳的排名一样。 我想到的唯一方法是查询整个集合并以编程方式对结果集执行搜索。它看起来一点也不高效,特别是因为当集合增长时它可能会出现内存问题。
【问题讨论】:
标签: mongodb
我想对 mongodb 集合执行排序查询,查找特定项目并在结果集中检索其索引。 例如,查找所有学生,按年级降序排序,得到学生“John Connor”的位置。就像在班上获得约翰康纳的排名一样。 我想到的唯一方法是查询整个集合并以编程方式对结果集执行搜索。它看起来一点也不高效,特别是因为当集合增长时它可能会出现内存问题。
【问题讨论】:
标签: mongodb
对于大型数据集,此类问题的一个答案是定期计算排名 - 每天一次,每小时一次,无论适合您的用例,然后存储预先计算的排名。 Stackoverflow 正是这样做的——如果我们要查看你在 stackoverflow 上的排名——https://stackexchange.com/leagues/1/year/stackoverflow/2014-01-01/873641#873641——这个排名不是动态计算的。您的问题已被投票,因此您的声望增加了 5,但尚未反映在您的排名中。
这个主题的一个变体是在任何人的成绩发生变化时强制重新排名。当成绩更改很少发生时很有用,但通过在更改后立即运行计算,您可以在最短的时间内以最小的成本不断重新排名。
关于 mongodb 的具体情况,是的,您需要遍历排名表才能计算它。
【讨论】: