我希望能够根据每个项目的以下属性对此集合进行排序。
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]);
所以基本上按照“距离”(时间*速度)按升序排列它们。
列表应该以此结尾;
但是,等级需要从距离和速度容器中导出,否则在用户更改值时会遇到问题;
distance1.set(time= "1");
distance1.set(velocity = "1");
distance2.set(time= "100");
distance2.set(velocity = "20");
distance3.set(time= "10000");
distance3.set(velocity = "20000");
应该排名哪个;
但如果等级是静态的,则不会这样做。
如何利用MongoDB的元和排序功能来允许基于用户输入的动态排名算法?有点像Reddit如何使用upvotes来确定页面排名的位置。
编辑:圣物捣乱了一个愚蠢的物理错误答案 0 :(得分:2)
最有效的方法是在更改应用代码中的值时更新rank
字段(即不允许设置time
和velocity
还要重新计算rank
)。然后,您可以添加适当的索引(或多个索引),包括rank
字段,以支持您的常见查询(有关创建索引的一些有用背景信息,请参阅Optimizing MongoDB Compound Indexes。)
您还可以通过aggregation framework的查询动态计算rank
,但这会导致对集合中所有匹配文档进行非常低效的重新计算,以确定结果顺序。