我需要按两个属性的平均值对查询进行排序,例如Story.scoped.order_by('(importance + points)/2')
。
正如我在MongoDB和Origin documentation上看到的那样,这似乎是不可能的。我是否需要创建具有平均结果和顺序的第三个属性?
| Story | points | importance
| first expected | 1 | 1
| third expected | 5 | 1
| second expected | 1 | 3
答案 0 :(得分:3)
您可以使用aggregation framework执行此操作。我不知道Ruby / mongoid,但这里是你用JavaScript做的:
db.coll.aggregate([
{ $project: {
Story: 1,
points: 1,
importance: 1,
avg: { $divide: [{ $add: ['$points', '$importance']}, 2]}}},
{ $sort: { avg: 1}}
], function(err, result){
console.log(result);
}
);
输出:
[ { _id: 50a14fcb9f0d79f4de752828,
Story: 'first expected',
points: 1,
importance: 1,
avg: 1 },
{ _id: 50a14fe59f0d79f4de75282a,
Story: 'second expected',
points: 1,
importance: 3,
avg: 2 },
{ _id: 50a14fd99f0d79f4de752829,
Story: 'third expected',
points: 5,
importance: 1,
avg: 3 } ]