简体   繁体   English

Spring data mongo 在查询中使用 OR

[英]Spring data mongo use OR in Query

Let´s see if somebody can help with this.让我们看看是否有人可以帮助解决这个问题。

I want use Repository of Spring Data mongodb, and I want use Query annotation to filter the find by value A=10 or A=20我想使用 Spring Data mongodb 的 Repository,我想使用 Query 注释按值A=10 or A=20过滤查找

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

Obiously "," try to make an AND, and I need an OR.显然,“,”尝试做一个 AND,而我需要一个 OR。

Any idea please?请问有什么想法吗?

Or if you are using a Criteria API或者,如果您使用的是 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");

我认为这可能有效

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

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

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

You can use Spring Data MongoDB like this:您可以像这样使用 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");

You can use the $in operator for that.您可以为此使用$in运算符。 I don't know Java Spring, but given your example, the Query part should look like:我不知道 Java Spring,但根据您的示例, Query部分应如下所示:

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

Use Spring's BasicQuery:使用 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);

In addition to helloJava answer, If you already have query with other criteria's you can add orOperation directly on query.addCriteria as below.除了 helloJava 答案,如果您已经有其他标准的查询,您可以直接在 query.addCriteria 上添加 orOperation ,如下所示。

query.addCriteria(new Criteria().orOperator(Criteria.where("fieldA").is(value),
                Criteria.where("fieldB").is(value2)));
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);

You can use Spring's Query structure:您可以使用 Spring 的 Query 结构:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM