2011-04-09 22 views
30

esta pregunta es muy similar a otro post¿Cómo consultar mongodb con "me gusta" utilizando la aplicación java?

Básicamente quiero utilizar la versión mongodb del SQL "como" '% m%' operador

pero en mi situación estoy usando la API de Java para mongodb, mientras que el otro puesto está utilizando consola MongoDB

he intentado lo que se ha escrito en el otro hilo y funcionó bien

db.users.find({"name": /m/}) 

pero en java, estoy usando el método de venta sobre el BasicDBObj ect y pasándolo en el método find() en un objeto DBCollections

BasicDBObject q = new BasicDBOBject(); 
q.put("name", "/"+m+"/"); 
dbc.find(q); 

pero esto no parece estar funcionando.

¿alguien tiene alguna idea?

Respuesta

63

lo necesario para pasar una instancia de una aplicación Java expresiones regulares (java.util.regex.Pattern):

BasicDBObject q = new BasicDBObject(); 
q.put("name", java.util.regex.Pattern.compile(m)); 
dbc.find(q); 

Esto se convertirá en una expresión regular MongoDB cuando se envía al servidor, así como cualquier banderas RegEx.

+0

+1 literalmente me salvó la cordura. He estado buscando cómo hacer algunas expresiones regulares negativas, ya que el operador $ not no excepto $ regex – kommradHomer

1

En mongodb datos de primavera, esto se puede hacer como:

Query query = new Query(); 
query.limit(10);   
query.addCriteria(Criteria.where("tagName").regex(tagName)); 
mongoOperation.find(query, Tags.class); 
2

Debe citar primero el texto y luego usar la compilación de obtener una expresión de expresiones regulares:

q.put("name", Pattern.compile(Pattern.quote(m))); 

Sin utilizar java.util.Pattern.quote() algunos los personajes no se escapan

p. Ej. usando ? como el parámetro m lanzará una excepción.

0
Document doc = new Document("name", Pattern.compile(keyword)); 
collection.find(doc); 
2

Para que sea más sensible a mayúsculas:

Document doc = new Document("name", Pattern.compile(keyword, Pattern.CASE_INSENSITIVE)); 
collection.find(doc); 
0

no podría ser la respuesta real, (Ejecutar la consulta del terminal directamente)

public void displayDetails() { 
    try { 
     // DB db = roleDao.returnDB(); 
     MongoClient mongoClient = new MongoClient("localhost", 5000); 
     DB db = mongoClient.getDB("test"); 
     db.eval("db.test.update({'id':{'$not':{'$in':[/su/]}}},{$set:{'test':'test3'}},true,true)", new Object[] {}); 
     System.out.println("inserted "); 

    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 
Cuestiones relacionadas