Exécution de la requête Mongo like (JSON)via Java
je me demandais s'il y avait un moyen d'exécuter mongo like query directement via Java, c'est-à-dire que nous donnions mongoDB like query comme une chaîne de caractères à une fonction dans le pilote Java pour mongoDB comme un objet String et un objet DBCursor est retourné. Quelque chose comme:
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);
}
}
}
Remarque: executeQuery()
n'est pas une fonction intégrée. Il est seulement utilisé pour des fins de démonstration.
Alors, Est-il une fonction dans l'api java qui convertit une chaîne json pour un BasicDBObject
exemple? Grâce.
5 réponses
ce que vous avez montré ici n'est pas JSON, c'est du code Javascript pour L'interpréteur de commandes MongoDB intégré. Si vous avez besoin pour une raison quelconque d'exécuter le code dans L'environnement Java, vous devrez intégrer le moteur Javascript (comme Rhino) et implémenter une API compatible.
sinon vous avez juste besoin de convertir JSON en DBObject
et vous pouvez le faire avec JSON.parse () méthode ou toute autre bibliothèque JSON-mapping comme Jackson. Notez que MongoDB utilise un ensemble étendu de types de données qui ne sont pas présents dans JSON:http://www.mongodb.org/display/DOCS/Data+Conventions+et + Conventions
UPD: Scott Hernandez a souligné à propos de JSON.parse
.
Oui, il est possible, en passant par le filtre sous la forme d'une chaîne. Exemple:
BasicDBObject query = BasicDBObject.parse("{userId: {$gt: \"1\"}}");
FindIterable<Document> dumps = crapCollection.find(query);
vous pouvez aussi utiliser com.mongodb.util.JSON
, mais je ne le recommande pas. C'est moins descriptif.
DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: \"1\"}}");
veuillez noter que ceci pourrait être vulnérable aux injections de SQL parce que vous analysez/construisez le filtre vous-même.
je recommande d'utiliser requête paramétrée de Jongo.
regardez bibliothèque Jongo - il vous permettra d'exécuter même des requêtes assez avancées en utilisant la syntaxe de ligne de commande.
il utilise aussi un Gson mapper très rapide pour vous retourner vos propres objets à la suite de la requête, au lieu d'une liste de BasicDBObjects.
je vous recommande d'utiliser mongo-shell-comme-utilitaire de requête (jar). Il vous permet d'écrire des requêtes mongo en code java (ou scala) en utilisant la même syntaxe que celle de l'interpréteur de commandes mongo. Pour être plus précis, vous pouvez écrire des requêtes mongo au format string. Il prend également en charge des fonctions avancées telles que le pipeline d'agrégation. Jetez un oeil à https://github.com/EqualExperts/mongo-shell-like-query
Vous pouvez suivre l'exemple du tutoriel:
http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery
notez leur utilisation d'un (Basic)DBObject pour créer la requête, Pas une chaîne.