2013-05-10 25 views
10

Zobaczmy, czy ktoś może pomóc w tym.Wiosenne dane mongo użyj LUB w Zapytaniu

chcę użyć repozytorium MongoDB Wiosna danych i chcę użyć adnotacji zapytań do filtrowania Znajdź wartości A=10 or A=20

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

Obiously „” starają się zrobić, a ja potrzebuję i OR.

Masz pomysł?

Odpowiedz

12

myślę, że to może działać

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

To było idealne !, dzięki! – paul

+0

Nie ma za co. Oznacz jako rozpoznane;) – FakeUser

+2

@FakeUser @Query ("{$ lub: [{" typ ":? 0}, {'klucz":? 1}, {' nazwa użytkownika ':? 2}]} ") właściwe zapytanie? –

1

Możesz użyć do tego operatora $in. Nie wiem Java Spring, ale biorąc pod uwagę swoją przykładu, Query część powinna wyglądać następująco:

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

Dzięki ale to strukturę adnotacji nie działa w Spring repozytorium danych, ktoś Czy ktoś jeszcze ma inny pomysł? – paul

-3

można wykorzystywać strukturę Query Wiosny:

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

Nie będzie działać, ponieważ używając powyższego, identyfikator jest już naprawiony iw tej klauzuli podstawowej zostanie zastosowany lub będzie zastosowany. Ale OP chce mieć bezpośrednią klauzulę pierwszego poziomu. – hellojava

+0

Czy możemy zastosować lubOperator z kilkoma innymi warunkami? –

2

Skorzystaj sprężyny 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

zapamiętajcie, ta konstrukcja, oprócz mniejszej liczby stworzonych obiektów, jest również przydatna, jeśli chcecie wykluczyć warunki NULL z operatora OR. –

25

Lub jeśli używasz 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

Można użyć $ w operatora w Spring Java:

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

Powiązane problemy