2013-08-29 10 views
15

MongoDB documentation状態:複数のキー(すなわち、化合物インデックス)とインデックスについてnode.jsのMongoDBインデックスのjavascriptオブジェクトのプロパティの順序をどのように指定できますか?

フィールドの順序は重要です。

しかし、次のようにECMAScriptのオブジェクトを定義:

オブジェクトは、Object型の部材です。 それぞれがプリミティブ値、オブジェクト、または関数を含む、順序付けられていないプロパティの集合です。です。 (this moduleを使用して、例えば)node.jsMongoDBを使用している場合、あなたは以下の例のように、サーバーサイドJavaScriptを使用している

MongoDBがobject(AKA順序付けられていないプロパティのコレクション)を予期しているときに、どのようにシーケンスを指定しますか? MongoDBので

collection.ensureIndex({ 
    date : -1, 
    client : 1, 
    product : 1 
}); 
+0

JavaScriptの "順序付けられていない"プロパティについては、シェル用に独自のバージョンのjsを実装しているので、私は心配しません。 'show dbs'を試してみると、私の言いたいことが分かります。 –

+0

申し訳ありませんが、私はスクリプト言語としてNode.js(javascript)について言及するのを忘れていました。 – Redsandro

+1

実際には、ECMA仕様では、(http://jsfiddle.net/D4zC8/2/)かもしれないとECMA仕様が指示しているように、実際には必ずしも順不同であるとは限りません。 ChromeとIE 10では、主要な順序が一貫しています。すべての主要な実装で新しい新しいオブジェクトリテラルがそのように動作した場合、あまりにも驚くことはありません。しかし、その動作に依存するコードをリリースするのはかなり狂っているようです。 Chromeでは、プロパティを削除して置換すると、キーの順序が変更されます。 IE10では、そうではありません。 –

答えて

9

、根本的なプログラミング言語は、このような考え方を持っていない場合でも、文書内のフィールドの順序は確かに重要であり、すべての言語のドライバは、そのように文書を指定する手段を提供します。

MongoDBがそのシェルで使用するドキュメントフォーマットは、JSONのようなものですが、厳密なJSONではありません。とりわけ、フィールドの順序は常に保存されます。

Javascriptでは、標準ではフィールドが順序付けされていないと定義されているため、実装は無視しても構いません。しかし実際にはであり、すべての実装では順序が保持されます。特にV8 engineは、node.jsで使用されているエンジンなので、問題はありません。

+0

これは、サーバー側のjavascriptである 'Node.js'で' MongoDB'を使うことについて言及していません。だから、私の心配は、Mongoが内部的にどのように処理するのかではなく、javascriptの部分です。 – Redsandro

+3

V8エンジンは、標準では順序付けられていないものとして定義されていますが、実際には順序を保持しています。これは、現在十分にうまく処理されているように見える灰色の領域です(すべての環境が本質的に順序付けを保持するため)。しかし、将来的にはさらに注意を向ける必要があります。 – drmirror

+0

いくつかのテストでは、V8が実際にこの順序を常に保持していることが示されています。あなたはあなたの答えにあなたのコメントを編集する必要があります、私はそれを受け入れるでしょう。 – Redsandro

関連する問題