2016-10-08 10 views
0

私は春のデータでmongoを操作しており、プロパティフィールドに基づいて "findBy"というクエリを使用しています。春データMongodb - 同じフィールドにOR句を持つfindByクエリ

私の目標は、このようなOR句で複数のプロパティで同じ値を見つけることになります(「作成者」、「主催者」と単一の値は「ゲスト」:

List<Event> findByCreatorOrOrganizersOrGuests(User user); 

このクエリは3つのプロパティを含み、コンパイル時に同じクラスタイプ(ユーザー)

が含まれています作成者)と2つのリスト(主催者とゲスト)私は、このエラーが表示されます。

org.springframework.data.repository.query.ParameterOutOfBoundsException: Invalid parameter index! You seem to have declare too little query method parameters! 

は私がREPEする必要がありますか同じパラメータで3回?回避策はありませんか?リストのMongoのクエリの使用

おかげ

答えて

0

あなたは、インデックスとそれを定義しても、それほど効率的ではありません。

List<Event> findByCreatorOrOrganizersOrGuests(User user); 

(MongoDBの変数は、比較的findByキーに()、戻り値はに挿入する必要がありますint型としての3つのパラメータを取得する予定で、いくつかの構文エラーが含まれています

もう一つ重要なことは、クエリがということですリストオブジェクト、およびIは、findクエリ内または法的な構文であることを確認していない。

概念として、それは最も高価なアクションです原因DBのドキュメントは、検索対象とするのは良い能力を持っている必要があります。

OR in MongoDB直接クエリはそのように見えるべきである:

DEFイベント=見つける({$または:[{user.username:{$ LT:20}}、{価格:10}]})

searching in a list一方これは異なるはずですので、私が添付したリンクに従ってください。

私があなたが探している用途を考えようとするとき、私は別の側面を示唆します。イベントが何か興味のある方は、AbstractPersistenceEventListenerをお読みください。適切な定義によって

void onPostInsert(entity) {} 
void onPostUpdate(entity) {} 
void onPostDelete(entity) {} 

あなたは聴きたいオブジェクトごとにすべてのイベントを取得します。

:ここ

は2偉大な例であり、

関連する問題