これは興味深い質問です。
実際にほとんどのECMAScript実装として動作します。doは、ノードで使用されるV8などのキーオーダーを保持します。単一昇順で並べ替えの好みの配列
{ "sort": [['field1','asc'], ['field2','desc']] }
をとるソートオプションパラメータでacievedすることができますソート
:しかし、公式Node MongoDB driverではなく、2つの異なる表記法を提供しています、その使用を奨励していません。フィールド配列はフィールド名で置き換えることができます。
{ "sort": "name" }
マングースのドキュメントには、キーの順序(少なくともない私の知っていること)については何も言及していません。しかし、それはまたtwo different approaches to sortingを提供しています:
// sort by "field" ascending and "test" descending
query.sort({ field: 'asc', test: -1 });
// equivalent
query.sort('field -test');
確かにマングースのソート機能は間違った(ただし、現在有効な)仮定に基づいていたようです。複数のキーで並べ替えるときは、文字列表記を使用するのが最善の方法です。私はこれについてMongoose issueを作成しました。
MongoDBを純粋なJSONではなくextended JSONとして直接使用する場合(MongoDBシェルなど)、MongoDBを直接使用する場合、オブジェクト表記によるソートは適切に機能します。
また、この非常に関連する質問を参照してください。その間にHow can you specify the order of properties in a javascript object for a MongoDB index in node.js?
を、私はマングースのために作成された問題が閉じられました:
うん、それはマングースやMongoDBの両方のために不幸なジレンマですドライバ ECMAScriptでは、キーは注文されていないと言われていますが、 はV8で実際に注文されています(数字キー以外は の場合があります)。近い将来、 のV8で注文され続ける可能性があります。 に関心がある場合は、[['field1'、 'asc']]構文または マングース固有の 'field1 -field2'構文またはES2015 Mapクラス (キーの挿入順序を保証します)を使用できますキーオーダー。だから
マングースを用いて、いずれかの文字列表記または挿入順序によって順序付けされることが保証されES2015 Mapsための新しく追加されたサポートを使用します。
出典
2017-01-30 09:15:46
str
もしあなたが明示的にmongodbに** firstNameでソートし、次に年齢によって** ** – ares
Mongodbドライバの実装が実際にECMAScript標準と矛盾するように動作する必要があるからです。それは既にここで答えられました:http://stackoverflow.com/a/18514551/5309460 – Meni
@Meniいいえそうする必要はありません。たとえば、公式のノードドライバは、複数のフィールドでソートする構文が異なります。 – str