6

私はこのmongoクエリを実行しています:

db.mytable.find({id:{$in:["1","2", "3", "4" ]}});

次のように、すべての結果が奇妙な順序で返されます。

4,3,2,1

クエリ配列で定義されたのと同じ順序ですべての結果を取得する必要があります。

1,2,3,4

出来ますか ?

4

3 に答える 3

1

注意すべき点がいくつかあります。

1.) MongoDB は、ほとんどのデータベースと同様に、への呼び出しを使用しない限り、クエリから返される結果の順序について保証しませんsort()。クエリ結果が特定の順序で返されることを本当に保証したい場合は、その特定の並べ替え順序を指定する必要があります。

2.) 一般に、最近更新/移動されたドキュメントが結果セットの最後に表示されますが、保証はありません。MongoDB は、オブジェクトのネイティブな順序付けに「自然順序」を使用します。これは挿入順序に非常に近いですが、同じであるとは限りません。

3.) インデックス付きフィールドの動作は異なります。クエリが を使用していて、 を使用idしていないように見えることに注意してください_id。前者は_idデフォルトでインデックスがid作成され、そのフィールドに明示的にインデックスを追加しない限り、インデックスは作成されません。

MongoDB のソートと順序付けについて詳しくは、 http ://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order をご覧ください。

于 2012-10-03T00:35:00.073 に答える
1

次のようなクエリを書くことができます:

db.mytable.find({id:{$in:["1","2", "3", "4" ]}}).sort({id:1})

あなたの結果を得るためにORDER BY id ASC

ソース: MongoDB 高度なクエリ

ただし、$in 配列に基づいて結果を並べ替えたいだけの場合は、$in 配列を逆の順序で並べ替えてみてください。$in 配列の最初の要素に関する結果は、配列の最後の要素として表示される可能性があります。結果

于 2012-10-02T15:47:47.320 に答える