1

MongoDB に文字列型のフィールドがあります。「10」、「101」、「11」、「112」、「x115」、「abc.5」などの文字と数字の組み合わせが含まれます。今、MongoDB にこれらをソートするように指示すると、次のようにアルファベット順にソートされます。

  • 10
  • 101
  • 11
  • 112
  • abc.5
  • x115

「11」の前に「101」を並べます。数字が正しく並べられるように並べ替えを変更するにはどうすればよいですか?

4

2 に答える 2

2

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 
});
于 2013-02-06T02:17:01.937 に答える