query - mongodb java
Ejecutando Mongo como Query(JSON) a través de Java (5)
Me preguntaba si hay una manera de ejecutar una consulta tipo mongo directamente a través de Java, es decir, le damos una consulta tipo mongoDB como una cadena a una función en el controlador Java para mongoDB como un objeto cadena y se devuelve un objeto DBCursor. Algo como:
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 es una función incorporada. Sólo se utiliza para fines de demostración. Entonces, ¿hay una función en la api de java que convierte una cadena json en una instancia de BasicDBObject
? Gracias.
Eche un vistazo a la biblioteca de Jongo , que le permitirá ejecutar consultas bastante avanzadas utilizando la sintaxis de la línea de comandos.
También utiliza un mapeador GSON muy rápido para devolverle sus propios objetos como resultado de la consulta, en lugar de una lista de objetos BasicDBO.
Lo que mostró aquí no es JSON, es el código Javascript para el shell MongoDB incorporado. Si, por alguna razón, necesita ejecutar el código dentro del entorno Java, deberá integrar el motor de Javascript (como Rhino ) e implementar una API compatible.
De lo contrario, solo necesita convertir JSON a DBObject
y puede hacer esto con el método JSON.parse() o cualquier otra biblioteca de mapeo 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ó sobre JSON.parse
.
Puedes seguir el ejemplo en el tutorial:
http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery
Tenga en cuenta su uso de DBObject (Basic) para crear la consulta, no una cadena.
Recomendaría usar la utilidad mongo-shell-like-query (jar). Le permite escribir consultas mongo en código java (o scala) usando la misma sintaxis que la del shell de comando mongo. Para ser más específico, puede escribir consultas mongo en formato de cadena. También es compatible con funciones avanzadas, como la canalización de agregación. Echa un vistazo a https://github.com/EqualExperts/mongo-shell-like-query
Sí, hay manera, pasando el filtro como una cadena. Ejemplo:
BasicDBObject query = BasicDBObject.parse("{userId: {$gt: /"1/"}}");
FindIterable<Document> dumps = crapCollection.find(query);
También puede usar com.mongodb.util.JSON
, pero no lo recomiendo. Es menos descriptivo.
DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: /"1/"}}");
Tenga en cuenta que esto podría ser vulnerable a las inyecciones de SQL porque usted mismo analiza / crea el filtro.
Recomiendo usar la consulta parametrizada de Jongo .