更新: この回答は古くなっているようです。 $project
を使用することで、カスタムの並べ替えを多かれ少なかれ実現できるようです。 ソート前に入力ドキュメントを変換する集約パイプラインの機能。 @Ariの回答も参照してください。
これが直接可能だとは思いません。ソートのドキュメントには、カスタム比較機能を提供する方法は確かに記載されていません。
クライアントで並べ替えを行うのがおそらく最善ですが、サーバーで並べ替えを行うことに本当に決心している場合は、db.eval()
を使用できる可能性があります。 サーバー上でソートを実行するように調整します(クライアントがそれをサポートしている場合)。
サーバー側の並べ替え:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
同等のクライアント側ソートとの比較:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
集計パイプラインと$orderby
で並べ替えることも可能です。 演算子(つまり、.sort()
に加えて )ただし、これらの方法のどちらでも、カスタムの並べ替え機能を提供することはできません。