async - ¿Cómo puedo crear una consulta $ o para MongoDB usando el controlador de Java?
mongodb driver (2)
Estoy tratando O O algunas condiciones en MongoDB (usando el controlador de Java). Esto es lo que estoy haciendo:
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"));
}
Me gustaría utilizar el $or
operando en estas condiciones, pero supongo que el valor predeterminado es "y" y no sé cómo cambiarlo. En el código anterior si una de las condiciones devuelve null
, el resultado será null
también.
Con los filters puedes construir los tuyos como:
Bson filter = Filters.or(
Filters.eq("post_title", regex),
Filters.eq("post_description", regex)
);
Tiene razón en que el "valor predeterminado" para especificar múltiples campos en una consulta es que cada campo sirve como un filtro condicional, y por lo tanto es una operación AND.
Puede realizar consultas MongoDB con una cláusula OR utilizando el $ o operando que tiene la siguiente sintaxis:
db.col.find({$or:[clause1, clause2]})
Donde cada cláusula puede ser una consulta. $ o no tiene que ser un operando de nivel superior, pero si es MongoDB puede usar un índice para cada cláusula separada.
En tu ejemplo, quieres terminar con esta consulta:
db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]});
Que se puede construir en Java a través de:
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);