MongoDB に文字列型のフィールドがあります。「10」、「101」、「11」、「112」、「x115」、「abc.5」などの文字と数字の組み合わせが含まれます。今、MongoDB にこれらをソートするように指示すると、次のようにアルファベット順にソートされます。
- 10
- 101
- 11
- 112
- abc.5
- x115
「11」の前に「101」を並べます。数字が正しく並べられるように並べ替えを変更するにはどうすればよいですか?
db.eval
データベース側でこれを行うことが決定されている場合は、使用することをお勧めします。
これが直接可能だとは思いません。並べ替えのドキュメントには 、カスタム比較関数を提供する方法についてはまったく言及されていません。
おそらくクライアントでソートを行うのが最善ですが、サーバーでソートを実行することに本当に決めている場合は、サーバー
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 });