2013-05-10 3 views
10

Mal sehen ob jemand dabei helfen kann.Federdaten Mongo Verwendung OR in Abfrage

Ich möchte Repository von Spring Data MongoDB verwenden, und ich möchte verwenden Abfrage Annotation den Fund von Wert A=10 or A=20

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

obiously zu filtern „“ versuchen, eine UND zu machen, und ich brauche eine OR.

Irgendeine Idee bitte?

Antwort

12

Ich denke, die

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

Das war perfekt!, Danke !! – paul

+0

Gern geschehen. Markiere es als aufgelöst;) – FakeUser

+2

@FakeUser @Query ("{$ oder: [{'type':? 0}, {'key':? 1}, {'username':? 2}]}") ist das die richtige Abfrage? –

1

Sie können dafür den Operator $in verwenden. Ich weiß nicht, Java Spring, aber Ihr Beispiel gegeben, der Query Teil soll wie folgt aussehen:

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

Dank aber, dass die Annotation Struktur funktioniert nicht im Frühjahr Daten-Repository, jemand hat sonst noch eine Idee? – paul

-3

funktionieren könnten Sie Spring Struktur Abfrage verwenden können:

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

Es funktioniert nicht, weil oben verwendet wird, ist eine ID bereits behoben und in dieser Basisklausel die oder wird angewendet. Aber OP möchte eine direkte OR-Klausel der ersten Ebene haben. – hellojava

+0

Können wir orOperator mit wenigen weiteren Bedingungen anwenden? –

2

Verwenden 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

Beachten Sie, dass dieses Konstrukt neben weniger Objekten auch praktisch ist, wenn Sie NULL-Bedingungen von einem OR-Operator ausschließen möchten. –

25

Oder, wenn Sie eine Criteria 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

verwenden, können Sie die $ in Betreiber in Spring Java verwenden:

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