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呢?