Spring数据mongo在Query中使用OR

pau*_*aul 14 java spring mongodb spring-data

我们来看看有人可以帮忙解决这个问题.

我想使用Spring Data mongodb的Repository,我想使用Query annotation来过滤find by value A=10 or A=20

  @Query("{A: 10, A:20}")
  findById(int id);
Run Code Online (Sandbox Code Playgroud)

勉强","尝试制作一个AND,我需要一个OR.

有什么好主意吗?

hel*_*ava 49

或者,如果您使用的是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");
Run Code Online (Sandbox Code Playgroud)


Fak*_*ser 20

我认为这可能有用

@Query("{'$or':[ {'A':10}, {'B':20} ] }")
Run Code Online (Sandbox Code Playgroud)

  • @FakeUser @Query("{$或:[{'type':?0},{'key':?1},{'username':?2}]}")这是正确的查询? (2认同)
  • @mahendrakawde查询对于通过`type`或`key`或`username`进行搜索是正确的 (2认同)

小智 15

您可以像这样使用 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");
Run Code Online (Sandbox Code Playgroud)


小智 8

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

query.addCriteria(new Criteria().orOperator(Criteria.where("fieldA").is(value),
                Criteria.where("fieldB").is(value2)));
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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