私はこのmongoクエリを実行しています:
db.mytable.find({id:{$in:["1","2", "3", "4" ]}});
次のように、すべての結果が奇妙な順序で返されます。
4,3,2,1
クエリ配列で定義されたのと同じ順序ですべての結果を取得する必要があります。
1,2,3,4
出来ますか ?
注意すべき点がいくつかあります。
1.) MongoDB は、ほとんどのデータベースと同様に、への呼び出しを使用しない限り、クエリから返される結果の順序について保証しませんsort()
。クエリ結果が特定の順序で返されることを本当に保証したい場合は、その特定の並べ替え順序を指定する必要があります。
2.) 一般に、最近更新/移動されたドキュメントが結果セットの最後に表示されますが、保証はありません。MongoDB は、オブジェクトのネイティブな順序付けに「自然順序」を使用します。これは挿入順序に非常に近いですが、同じであるとは限りません。
3.) インデックス付きフィールドの動作は異なります。クエリが を使用していて、 を使用id
していないように見えることに注意してください_id
。前者は_id
デフォルトでインデックスがid
作成され、そのフィールドに明示的にインデックスを追加しない限り、インデックスは作成されません。
MongoDB のソートと順序付けについて詳しくは、 http ://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order をご覧ください。
次のようなクエリを書くことができます:
db.mytable.find({id:{$in:["1","2", "3", "4" ]}}).sort({id:1})
あなたの結果を得るためにORDER BY id ASC
ソース: MongoDB 高度なクエリ
ただし、$in 配列に基づいて結果を並べ替えたいだけの場合は、$in 配列を逆の順序で並べ替えてみてください。$in 配列の最初の要素に関する結果は、配列の最後の要素として表示される可能性があります。結果