Spring数据mongo在Query中使用OR

时间:2013-05-10 08:33:10

标签: java spring mongodb spring-data

让我们看看有人可以帮忙解决这个问题。

我想使用Spring Data mongodb的Repository,我希望使用Query annotation按值A=10 or A=20

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

Obiously“,”尝试制作一个AND,我需要一个OR。

请问好吗?

9 个答案:

答案 0 :(得分:43)

或者如果您使用的是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");

答案 1 :(得分:18)

我认为这可能有效

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

答案 2 :(得分: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);

答案 3 :(得分:2)

您可以像这样使用Spring Data MongoDB:

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

mongoTemplate.find(query, YourClazz.class, "CollectionName");

答案 4 :(得分:1)

您可以使用$in运算符。我不了解Java Spring,但是根据你的例子,Query部分应该是这样的:

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

答案 5 :(得分:1)

您可以在Spring Java中使用$ in运算符:

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

答案 6 :(得分:1)

除了helloJava答案外,如果您已经有其他条件的查询,则可以直接在query.addCriteria上添加orOperation,如下所示。

query.addCriteria(new Criteria().orOperator(Criteria.where("fieldA").is(value),
                Criteria.where("fieldB").is(value2)));

答案 7 :(得分:-1)

Query query = new Query();  
Criteria criteria = new Criteria();  
criteria.orOperator(Criteria.where("category").is("your_Value_Category"), 
    Criteria.where("parentCategory").is("your_Value_ParentCategory"));
query.addCriteria(criteria);
mongoTemplate.find(query, YourPersistenceClass.class);

答案 8 :(得分:-3)

您可以使用Spring的Query结构:

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