0

PHPを介して作成したmongoDBコレクションがあります。ここで、いくつかのフィールドにインデックスを付けたいのですが、phpのドキュメントでは、インデックスに並べ替えを適用しない方法については説明されていません。

たとえば、field1、field2、field3にインデックスを付け、すべてをfield3で並べ替えます。

field1、field2に基づいてコレクションを検索するので、それらにインデックスがあることを確認したかったのですが、コレクションがfind()操作から戻ったときに、field3でソートしたかっただけです。

何かご意見は?

4

2 に答える 2

2

あなたの質問に完全に答える前に、少し背景情報を提供することは私にとって有用だと思いました:

mongoがコレクションにインデックスを作成する場合、基本的にはインデックスキーに基づいてコレクションを並べ替えます。したがって、インデックスを使用するクエリから結果を取得すると、結果はそのインデックスのキーで並べ替えられます。クエリでfield1の基本インデックスを使用している場合、結果は定義上、そのインデックスで並べ替えられます。

ただし、これを回避する方法はいくつかあります。簡単な方法の1つは

1)フィールド1のクエリ

2)field3を使用して1)の結果を並べ替えます

これは、私があなたのコメントを正しく理解していれば、あなたが望む出力を得るでしょう。ただし、2つの主要な作業が必要になるという欠点があり、データのサイズによってはコストがかかる可能性があります。

問題を解決する別の方法があります。複合インデックスです。複合インデックスは、複数のキーを使用して、それらの両方のキーに基づいてソートされるインデックスを生成します。ここにいくつかのドキュメントがあります:http ://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysそして、主題をより深く掘り下げたい場合は、複合インデックスに関するスタックオーバーフローの質問がかなりあります。

また、mongodbでのインデックス作成(および複合インデックス作成)に関する一般的な情報が必要な場合は、http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-1を確認してください。このドキュメント全体は、私が期待するあなたにとって本当に役立つはずです。

複合インデックスの使用は、エレガントで適切ですが、クエリの後に並べ替えを使用するよりも明らかに複雑です。あなたがそれを調査することに時間を費やすことをいとわないなら、あなたはそれがあなたが素晴らしい解決策を見つけるのを助けると思うだろうと私は確信しています。

お役に立てれば!

于 2012-09-06T19:44:00.393 に答える
0

いいえ、複合インデックスの全体的な並べ替え順序を、個々のインデックスコンポーネントの並べ替え順序から分離することはできません。

したがって、この例では、field3で並べ替えを行うfield1、field2でのクエリでは、インデックス支援の並べ替えをサポートするために、複合field1、field2、field3インデックスが必要になります。ただし、結果に複数のfield1、field2の組み合わせが返された場合、そのインデックスは並べ替えに役立ちません。その場合、メモリ内の並べ替えが必要になります。

于 2012-09-06T19:53:49.970 に答える