MongoDB自定义排序与其他值?

时间:2015-06-12 02:32:43

标签: javascript mongodb sorting

我希望能够根据每个项目的以下属性对此集合进行排序。

var distance1 = { velocity : 100, time: 20, rank: time*velocity};
var distance2 = { velocity : 50, time: 25, rank: time*velocity};
var distance3 = { velocity : 300, time: 10, rank: time*velocity};

collection.insert([distance1, distance2, distance3]);

所以基本上按照“距离”(时间*速度)按升序排列它们。

列表应该以此结尾;

  1. 距离2
  2. 距离1
  3. 距离3
  4. 但是,等级需要从距离和速度容器中导出,否则在用户更改值时会遇到问题;

    distance1.set(time= "1");
    distance1.set(velocity = "1");
    
    distance2.set(time= "100");
    distance2.set(velocity = "20");
    
    distance3.set(time= "10000");
    distance3.set(velocity = "20000");

    应该排名哪个;

    1. 距离1
    2. 距离2
    3. 距离3
    4. 但如果等级是静态的,则不会这样做。

      如何利用MongoDB的元和排序功能来允许基于用户输入的动态排名算法?有点像Reddit如何使用upvotes来确定页面排名的位置。

      编辑:圣物捣乱了一个愚蠢的物理错误

1 个答案:

答案 0 :(得分:2)

最有效的方法是在更改应用代码中的值时更新rank字段(即不允许设置timevelocity还要重新计算rank)。然后,您可以添加适当的索引(或多个索引),包括rank字段,以支持您的常见查询(有关创建索引的一些有用背景信息,请参阅Optimizing MongoDB Compound Indexes。)

您还可以通过aggregation framework的查询动态计算rank,但这会导致对集合中所有匹配文档进行非常低效的重新计算,以确定结果顺序。