2013-05-10 4 views
10

誰かがこれを手助けできるかどうかを見てみましょう。春のデータを照会するOR

私は春データのMongoDBのリポジトリを使用したい、と私はObiously「」ANDをしよう、と私はORが必要A=10 or A=20

@Query("{A: 10, A:20}") 
    findById(int id); 

値で検索をフィルタリングするクエリのアノテーションを使用します。

どうぞよろしくお願いします。

答えて

12

:私は、Javaの春を知らないが、あなたの例を考えると、Query部分は次のようになります

Query query = new Query(); 
query.addCriteria(Criteria.where("id").is(10).orOperator(Criteria.where("id").is(20)); 
this.client.findOne(query, clazz); 
+0

それは完璧だった!、ありがとう! – paul

+0

ようこそ。 ){0}、{'key':?1}、{'username':?2}]} '') ")これは解決されたものとしてマークします; – FakeUser

+2

@FakeUser @Query正しいクエリですか? –

1

これには$in演算子を使用できます。私は、これはあなたが春のクエリ構造を使用することができます

@Query("{'$or':[ {'A':10}, {'B':20} ] }") 
+0

を他にも別のアイデアがありますか? – paul

-3

を働くかもしれないと思う

@Query("{A: {$in: [10, 20]}}") 
+2

idを既に使用していて、そのbase節にorが適用されているので動作しません。しかし、OPは直接的な第1レベルのOr節を持つことを望んでいます。 – hellojava

+0

私たちは、いくつかの条件でorOperatorを適用できますか? –

2

使用SpringのBasicQuery:

DBObject queryCondition = new BasicDBObject();   
BasicDBList values = new BasicDBList(); 
values.add(new BasicDBObject("A", 10)); 
values.add(new BasicDBObject("B", 20)); 
queryCondition.put("$or", values); 
Query query = new BasicQuery(queryCondition); 
mongoTemplate.find(query, clazz); 
+0

OR演算子からNULL条件を除外したい場合は、このコンストラクトは少ないオブジェクトの作成以外にも便利です。 –

25

それとも、あなたは春、Javaの演算子で$使用することができますクライテリアAPI

Criteria criteria = new Criteria(); 
     criteria.orOperator(Criteria.where("A").is(10),Criteria.where("B").is(20)); 
     Query query = new Query(criteria); 

     mongoOps.find(query, <Yourclass>.class, "collectionName"); 
0

を使用している場合:その注釈構造が、おかげで春データリポジトリ、誰かでは動作しません

Criteria criteria = Criteria.where("field").in(listOfOptions);

関連する問題