2017-04-10 5 views
0

私は大きなMongoDbコレクションを持っています。ユーザーは複数のArrayフィールドで検索できます。インデックスに登録するにはどうすればよいですか?複数の配列フィールドでのMongoDBのパフォーマンスの向上

"モンゴ::エラー:: OperationFailure:できないインデックス並行配列"

例クエリ:MongoDBの1として

db.collection.find(
    {category_ids: {$in: [object_id, object_id]}, 
    second_category_ids: $in: {[object_id, object_id]} 
    } 
) 

答えて

0

私は、複数の配列のインデックスのインデックスを作成することで終わることを見ましたdocumentation、並列配列のマルチキーインデックスは使用できません。下記のドキュメントは、我々が行うことができ、最大で

As such, you cannot create a compound multikey index if more than one to-be-indexed field of a document is an array. Or, if a compound multikey index already exists, you cannot insert a document that would violate this restriction.

をreads-何であることは、両方のフィールドが個別に、クエリ、それは感じている最高のインデックスを使用しますインデックスです。クエリプランナより優れたアイデアがある場合は、ヒントを使用して特定のインデックスを使用することもできます。

また、スキーマの再構築が考えられます。例えば、サブカテゴリは異なるコレクションで取り出すことができます。私がデータパターンとスキーマ設計についてもっと知ることができれば助けになるかもしれません。

+0

私は、__approved__、__banned__、__reviewed__などのフィールドを持つ__Event__モデルを持っています。これらは常に照会されます。しかし、__country__ __region__ __city__のようなフィールドを検索することもできます。これらは、ユーザーの動作に応じて要求されます。最後に、ユーザは配列であるそのイベントの__category_ids__と__musicstyle_ids__の一方または両方を検索することができます。 – Jan

+0

私はいくつかのGoogleをして、これを見つけたhttp://stackoverflow.com/questions/25059525/indexing-parallel-arrays-in-mongodb#comment39032157_25067084 –

関連する問題