Точно так же, как сказал Bugai13, вам нужно третье свойство в вашей коллекции, чтобы выполнить сортировку.Вы можете добавить свойство ratio с помощью вызова mapReduce (как показано ниже), но это не будет очень быстро для больших коллекций - и заблокирует вашу базу данных, пока она работает.Вы действительно должны вручную поддерживать свойство ratio - это не должно быть очень сложно.
db.data.insert({a: 1, b: 1});
db.data.insert({a: 2, b: 2});
db.data.insert({a: 3, b: 3});
db.data.insert({a: 1, b: 4});
db.data.insert({a: 2, b: 1});
db.data.insert({a: 3, b: 2});
db.data.insert({a: 1, b: 3});
db.data.insert({a: 2, b: 4});
db.data.insert({a: 3, b: 1});
db.data.insert({a: 1, b: 2});
db.data.insert({a: 2, b: 3});
db.data.insert({a: 3, b: 4});
db.data.mapReduce(
function(){
emit(this._id, this);
},
function(k, vs){
v = vs[0];
v.c = v.a / v.b;
return v;
},
{out : 'data'}
);
db.data.find().sort({c:1});