2011-02-01 18 views
14

Me preguntaba si hay una manera de ejecutar mongo como consulta directamente a través de Java, es decir, damos mongoDB como consulta como una cadena a una función en el controlador de Java para mongoDB como un objeto de cadena y se devuelve un objeto DBCursor. Algo así como:Ejecutando Mongo como Query (JSON) a través de Java

import com.mongodb.*; 
import java.net.UnknownHostException; 
public class ExecuteQuery { 
public static void main(String args[]){ 
    try{ 
      Mongo m = new Mongo(); 
      DB db = m.getDB("test"); 
      DBCollection coll = db.getCollection("first"); 
      DBObject doc = new BasicDBObject(); 
      DBCursor cur =coll.executeQuery("db.first.find({"username":"joe"})"); 
     } 
     catch(UnknownHostException e){ 
      System.out.println(e); 
     } 
     catch (MongoException.DuplicateKey e) { 
      System.out.println("Exception Caught" + e); 
     } 
} 
} 

Nota: executeQuery() no está construido en una función. Solo se usa con fines de demostración. Entonces, ¿hay una función en la API java que convierta una cadena json en una instancia BasicDBObject? Gracias.

+5

¿Qué solución usaste? Estoy interesado en esto – jjmartinez

+0

Puede consultar este enlace. Podría ayudar. https://stackoverflow.com/questions/47093563/how-to-execute-mongodb-native-query-json-using-mongo-java-driver-only/47097555#47097555 –

Respuesta

7

Lo que mostró aquí no es JSON, es el código de Javascript para MongoDB Shell incorporado. Si necesita algún motivo para ejecutar el código dentro del entorno Java, deberá incrustar el motor Javascript (como Rhino) e implementar una API compatible.

De lo contrario, solo necesita convertir JSON a DBObject y puede hacerlo con el método JSON.parse() o cualquier otra biblioteca de mapas JSON como Jackson. Tenga en cuenta que MongoDB utiliza un conjunto extendido de tipos de datos que no están presentes en JSON: http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions

UPD: Scott Hernandez señaló JSON.parse.

+0

Hay un método JSON.parse() para Convierta la cadena json en un DBObject. –

+0

Gracias por la corrección.Sí, he probado el analizador JSON proporcionado en la biblioteca MongoDB para Java. Si es posible, por favor, hágame saber un poco más sobre Rhino. –

1

Eche un vistazo a Jongo library - le permitirá ejecutar incluso consultas bastante avanzadas utilizando la sintaxis de la línea de comandos.

También utiliza un correlador GSON muy rápido para devolverle sus propios objetos como resultado de la consulta, en lugar de una lista de BasicDBObjects.

1

Recomendaría utilizar la utilidad mongo-shell-like-query (jar). Le permite escribir consultas de mongo en código java (o scala) usando la misma sintaxis que la del shell de comandos de mongo. Para ser más específico, puede escribir consultas mongo en formato de cadena. También es compatible con características avanzadas como la tubería de agregación. Eche un vistazo a https://github.com/EqualExperts/mongo-shell-like-query

3

Sí, hay forma de pasar el filtro como una cadena. Ejemplo:

BasicDBObject query = BasicDBObject.parse("{userId: {$gt: \"1\"}}"); 
FindIterable<Document> dumps = crapCollection.find(query); 

también puede utilizar com.mongodb.util.JSON, pero yo no lo recomiendo. Es menos descriptivo.

DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: \"1\"}}"); 

Tenga en cuenta que esto puede ser vulnerable a las inyecciones de SQL porque usted analiza/crea el filtro usted mismo.

Recomiendo usar Jongo's parameterized query.

Cuestiones relacionadas