Mongo复杂sorting?

我知道如何通过多个字段对MongoDB中的查询进行sorting,例如, db.coll.find().sort({a:1,b:-1})

我可以使用用户定义的函数进行sorting吗? 例如假设a和b是整数,a和b (ab)之间的差值?

谢谢!

更新:这个答案似乎是过时的; 似乎自定义sorting可以通过使用汇总pipe道的$project函数在sorting之前转换input文档来实现。 另见@阿里的回答。

我不认为这是可能的, sorting文档当然没有提到任何提供自定义比较函数的方法。

你可能最好在客户端进行sorting,但是如果你真的决定在服务器上做,你可以使用db.eval()来安排在服务器上运行sorting(如果你的客户端支持它)。

服务器端sorting:

 db.eval(function() { return db.scratch.find().toArray().sort(function(doc1, doc2) { return doc1.a - doc2.a }) }); 

与对等的客户端sorting:

 db.scratch.find().toArray().sort(function(doc1, doc2) { return doc1.a - doc2.b }); 

请注意,也可以通过聚合pipe道和$orderby运算符进行sorting(即除了.sort() ),但是这两种方法都不能让您提供自定义sortingfunction。

走进这个,这就是我想到的:

 db.collection.aggregate([ { $project: { difference: { $subtract: ["$a", "$b"] } // Add other keys in here as necessary } }, { $sort: { difference: -1 } } ]) 

为什么不用这个操作创build字段并对其进行sorting呢?