2013-06-04 3 views
5
db.jason.find().sort({"rank":1}) 

{ "_id" : ObjectId("51ae517372779b7eeeb81342"), "name" : "jason" } 
{ "_id" : ObjectId("51ae517372779b7eeeb81343"), "name" : "jason" } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133a"), "name" : "jason", "rank" : 0 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133b"), "name" : "jason", "rank" : 1 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133c"), "name" : "jason", "rank" : 2 } 

私はランクのないドキュメントではソートとそれを開始すると結論づけたいと思いますが、昇順でランク付けしてください。これは可能ですか、99999のような文字列か数字の大きいものを空にする必要がありますか?mongoは空の/欠落したフィールドのある文書を最後にascの順に返しますか?

答えて

5

db.jason.find().sort({"rank":1})の結果を返すと、MongoDBはドキュメントを「ランク」タイプで、次に「ランク」値で並べ替えます。ソート順のために、MongoDBはフィールドが欠落しているドキュメントをそのフィールドにNULL型を持つものとして扱います。 NULL型は数値型の前に順序付けされていますが、これは変更できません(組み込み型のソート順はhttp://docs.mongodb.org/manual/reference/method/cursor.sort/を参照)。私は代わりに2つのクエリを構築することをお勧めします( "ランク"を含むドキュメント用と、 "ランク"を持たないドキュメント用のもの)、アプリケーションで結果をマージすることをお勧めします。ただし、これを1つのクエリで保持する必要がある場合は、必要な順序を生成するためにすべてのドキュメントで「ランク」を設定する必要があります(数値型の後にソートされる型のセンチネル値を使用するなど)。

+0

これは私が考えたことですが、あなたは[eval()](http://docs.mongodb.org/manual/reference/command/eval/)関数を知っていますか?それはカスタムソートを扱うことができるように見えますが空のフィールドについてはあまり確かではありません。 – jasonsemko

関連する問題