0

次のようなケースがあります。たとえば「Test」という名前のコレクションがあり、そのためのインデックスを設定しました。インデックスは次のようになります。

{
 "A" : 1,
 "B" : 1,
 "C" : 1
}

私のコードでは、「A」が特定の値であることに基づいてレコードを取得しています。

List<Test> tests = Test.Find(Query.EQ("A", CertainValue)).ToList();

そして驚いたことに、すべてのレコードがインデックスに記載されている順序でソートされて戻ってきます (「B」が昇順、次に「C」が昇順)。

この動作が常に予想されるのか、レコードは常にインデックスに基づいてソートされるのか、それとも単に想像しているだけなのか、これは 1 回限りのケースなのか、疑問に思っていました。

PS。レコードはソートされたコレクションに入力されないため、これはレコードの自然な順序ではありません。

4

1 に答える 1

1

他の多くのディクショナリの実装と同様に、データベース内の順序は定義または保証されておらず (上限のあるコレクションを除く)、いつでも変更される可能性があります。

「自然順序」は、コレクション内のオブジェクトのデータベース固有の順序として定義されます。

パラメータなしで find() を実行すると、データベースは順方向自然順序でオブジェクトを返します。

標準テーブルの場合、自然順序は特に有用ではありません。順序は挿入順序に近いことがよくありますが、そうであるとは限らないためです。ただし、Capped Collections の場合、挿入順序は自然順序であることが保証されます。

何らかの方法で並べ替える必要がある場合は、明示的な並べ替えを使用するか、特定のドライバー (C#) の実装ドキュメントを参照して、並べ替えが行われるかどうかを確認してください。

于 2012-11-01T18:27:30.380 に答える