para async java mongodb mongodb-query mongo-java-driver

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