30

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

我想使用 Spring Data mongodb 的存储库,并且我想使用 Query 注释来过滤按值查找A=10 or A=20

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

显然“,”尝试做一个 AND,我需要一个 OR。

请问有什么想法吗?

4

9 回答 9

88

或者,如果您使用的是 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");
于 2014-12-22T15:08:24.653 回答
31

我认为这可能有效

@Query("{'$or':[ {'A':10}, {'B':20} ] }")
于 2013-05-23T14:05:58.993 回答
7

您可以像这样使用 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");
于 2020-01-15T02:58:38.603 回答
5

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

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

于 2017-12-13T01:17:46.133 回答
3

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

query.addCriteria(new Criteria().orOperator(Criteria.where("fieldA").is(value),
                Criteria.where("fieldB").is(value2)));
于 2019-12-16T05:27:31.103 回答
2

您可以为此使用$in运算符。我不知道 Java Spring,但鉴于您的示例,该Query部分应如下所示:

@Query("{A: {$in: [10, 20]}}")
于 2013-05-10T12:57:07.930 回答
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);
于 2014-10-22T11:03:50.980 回答
0
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);
于 2018-10-11T14:59:16.940 回答
-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);
于 2013-07-31T08:38:57.613 回答