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.

15
demandé sur rdonatoiop 2011-02-01 12:12:25

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.

7
répondu pingw33n 2011-02-02 10:34:10

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.

3
répondu AlikElzin-kilaka 2016-09-15 13:04:56

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.

1
répondu Ryan Kimber 2013-03-17 15:01:05

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

1
répondu user2599739 2013-07-19 14:05:03

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.

0
répondu Scott Hernandez 2011-02-01 18:09:42