source

Java 드라이버를 사용하여 MongoDB에 대한 $or 쿼리를 작성하려면 어떻게 해야 합니까?

manysource 2023. 5. 25. 22:09

Java 드라이버를 사용하여 MongoDB에 대한 $or 쿼리를 작성하려면 어떻게 해야 합니까?

(자바 드라이버를 사용하여) MongoDB의 몇 가지 조건을 Or하려고 합니다.제가 하고 있는 일은 다음과 같습니다.

Pattern regex = Pattern.compile("title");   
DBCollection coll = MongoDBUtil.getDB().getCollection("post_details");

BasicDBObject query = new BasicDBObject();
query.put("category_title", "myCategory");      
query.append("post_title", regex);  
query.append("post_description", regex);    

DBCursor cur = coll.find(query);
while(cur.hasNext()) {
    System.out.println(cur.next().get("post_id"));
}

저는 그것을 사용하고 싶습니다.$or이러한 조건에서 연산을 수행하지만 기본값은 "and"이고 변경 방법을 모르겠습니다.위 코드에서 조건 중 하나가 반환되는 경우null결과는 다음과 같습니다.null너무.

쿼리에서 여러 필드를 지정하는 "기본값"은 각 필드가 조건부 필터 역할을 하므로 AND 작업인 것이 맞습니다.

다음 구문을 가진 $or 피연산자를 사용하여 OR 절을 사용하여 MongoDB 쿼리를 수행할 수 있습니다.

db.col.find({$or:[clause1, clause2]})

여기서 각 절은 쿼리가 될 수 있습니다.$or는 최상위 피연산자일 필요는 없지만 MongoDB일 경우 각 절에 대해 인덱스를 사용할 수 있습니다.

예제에서는 다음과 같은 쿼리를 사용합니다.

db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]});  

다음을 통해 Java로 구성할 수 있습니다.

DBObject clause1 = new BasicDBObject("post_title", regex);  
DBObject clause2 = new BasicDBObject("post_description", regex);    
BasicDBList or = new BasicDBList();
or.add(clause1);
or.add(clause2);
DBObject query = new BasicDBObject("$or", or);

필터를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

import com.mongodb.client.model.Filters;
...

Bson filter = Filters.or(
                    Filters.eq("post_title", regex), 
                    Filters.eq("post_description", regex)
                  );

언급URL : https://stackoverflow.com/questions/10620771/how-can-i-build-an-or-query-for-mongodb-using-the-java-driver