2013-05-10 34 views
10

Hãy xem liệu có ai đó có thể giúp điều này không.Dữ liệu mùa xuân mongo sử dụng HOẶC trong Truy vấn

Tôi muốn sử dụng kho dữ liệu mùa xuân MongoDB, và tôi muốn sử dụng Query chú thích để lọc tìm theo giá trị A=10 or A=20

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

Obiously "" cố gắng làm cho AND, và tôi cần một OR.

Bạn có ý tưởng nào không?

Trả lời

12

Tôi nghĩ rằng điều này có thể làm việc

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

Đó là hoàn hảo !, cảm ơn !! – paul

+0

Bạn được chào đón. Đánh dấu nó là đã giải quyết;) – FakeUser

+2

@FakeUser @Query ("{$ hoặc: [{'type':? 0}, {'key':? 1}, {'username':? 2}]}") là cái này truy vấn đúng? –

1

Bạn có thể sử dụng toán tử $in cho điều đó. Tôi không biết Java Spring, nhưng với ví dụ của bạn, phần Query nên hình như:

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

Cảm ơn, nhưng mà cấu trúc chú thích không làm việc trong kho lưu trữ dữ liệu mùa xuân, ai đó khác có ý kiến ​​khác xin vui lòng? – paul

-3

Bạn có thể sử dụng cấu trúc Query Spring:

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

Nó sẽ không hoạt động vì sử dụng ở trên, id đã được cố định và trong mệnh đề cơ sở đó hoặc sẽ được áp dụng. Nhưng OP muốn có một mệnh đề Or cấp trực tiếp đầu tiên. – hellojava

+0

Chúng tôi có thể áp dụng orOperator với vài điều kiện hơn không? –

2

Sử dụng truy vấn cơ bản của Spring:

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

lưu ý tất cả mọi người, cấu trúc này, ngoài việc tạo ra ít đối tượng hơn, cũng thuận tiện nếu bạn muốn loại trừ các điều kiện NULL từ toán tử OR. –

25

Hoặc nếu bạn đang sử dụng một API Tiêu chuẩn

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

Bạn có thể sử dụng $ trong nhà điều hành trong mùa xuân Java:

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

Các vấn đề liên quan