【问题标题】:How to get the index of an item in a mongo result set如何获取mongo结果集中项目的索引
【发布时间】:2014-05-19 17:10:11
【问题描述】:

我想对 mongodb 集合执行排序查询,查找特定项目并在结果集中检索其索引。 例如,查找所有学生,按年级降序排序,得到学生“John Connor”的位置。就像在班上获得约翰康纳的排名一样。 我想到的唯一方法是查询整个集合并以编程方式对结果集执行搜索。它看起来一点也不高效,特别是因为当集合增长时它可能会出现内存问题。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    对于大型数据集,此类问题的一个答案是定期计算排名 - 每天一次,每小时一次,无论适合您的用例,然后存储预先计算的排名。 Stackoverflow 正是这样做的——如果我们要查看你在 stackoverflow 上的排名——https://stackexchange.com/leagues/1/year/stackoverflow/2014-01-01/873641#873641——这个排名不是动态计算的。您的问题已被投票,因此您的声望增加了 5,但尚未反映在您的排名中。

    这个主题的一个变体是在任何人的成绩发生变化时强制重新排名。当成绩更改很少发生时很有用,但通过在更改后立即运行计算,您可以在最短的时间内以最小的成本不断重新排名。

    关于 mongodb 的具体情况,是的,您需要遍历排名表才能计算它。

    【讨论】:

    • 我理解你的观点,但我认为它不会删除上述观点。因为在更新学生的成绩后,您将不得不更新他的排名......以及所有其他人的排名。当然,你可以假设在累积了一些成绩之后,每增加一个成绩,排名不会有太大变化,你甚至可以允许一些错误:比如在增加一个新成绩后一次只更新一个排名而不更新其他的排名。我认为这是你的方法唯一可能的解决方案......允许一些错误。
    • 是的,这是正确的,您需要在任何年级变化后重新计算所有排名。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2014-10-27
    • 2019-01-25
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多