web-dev-qa-db-ja.com

Spring data mongo use OR Query in query

誰かがこれを助けることができるかどうか見てみましょう。

Spring Data mongodbのリポジトリを使用し、Queryアノテーションを使用して、値で検索をフィルタリングしますA=10 or A=20

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

ひたすら "、" ANDを作成しようとすると、ORが必要です。

何かアイデアはありますか?

16
paul

これはうまくいくと思います

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

または、基準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");
52
hellojava

Spring Javaでは$ in演算子を使用できます。

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

3
pama

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);
2
david

$in 演算子。わからないJava Springですが、例を挙げれば、Queryの部分は次のようになります。

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

次のように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");
1
Yushi

HelloJavaの回答に加えて、すでに他の基準を持つクエリがある場合は、以下のようにquery.addCriteriaにorOperationを直接追加できます。

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