2011-02-01 17 views
14

Mi chiedevo se esiste un modo per eseguire la query di mongo direttamente tramite Java, ovvero diamo come query mongoDB come una stringa a una funzione nel driver Java per mongoDB come oggetto String e viene restituito un oggetto DBCursor. Qualcosa di simile:Esecuzione di Mongo come Query (JSON) tramite 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() non è una costruito in funzione. È usato solo a scopo dimostrativo. Quindi, c'è una funzione in java api che converte una stringa json in un'istanza BasicDBObject? Grazie.

+5

Quale soluzione hai usato ?? Sono interessante su questo – jjmartinez

+0

Puoi controllare questo link. Potrebbe essere d'aiuto. https://stackoverflow.com/questions/47093563/how-to-execute-mongodb-native-query-json-using-mongo-java-driver-only/47097555#47097555 –

risposta

7

Quello che hai mostrato qui non è JSON, è il codice Javascript per Embedded MongoDB Shell. Se è necessario per qualche motivo eseguire il codice all'interno dell'ambiente Java, sarà necessario incorporare il motore JavaScript (come Rhino) e implementare l'API compatibile.

In caso contrario, è sufficiente convertire JSON in DBObject ed è possibile farlo con il metodo JSON.parse() o qualsiasi altra libreria di mapping JSON come Jackson. Si noti che MongoDB utilizza un set esteso di tipi di dati che non sono presenti in JSON: http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions

UPD: Scott Hernandez ha indicato circa JSON.parse.

+0

C'è un metodo JSON.parse() per convertire la stringa json in un DBObject. –

+0

Grazie per la correzione.Sì, ho provato il parser JSON fornito nella libreria MongoDB per Java. Se possibile, per favore fammi sapere qualcosa in più su Rhino. –

1

Dai un'occhiata allo Jongo library - ti permetterà di eseguire anche query abbastanza avanzate usando la sintassi della riga di comando.

Utilizza inoltre un mappatore GSON molto veloce per restituire gli oggetti all'utente come risultato della query, anziché un elenco di BasicDBObjects.

1

Si consiglia di utilizzare l'utilità di query mongo-shell-like (jar). Permette di scrivere query mongo in codice java (o scala) usando la stessa sintassi della shell dei comandi mongo. Per essere più specifici, è possibile scrivere query mongo in formato stringa. Supporta anche funzionalità avanzate come la pipeline di aggregazione. https://github.com/EqualExperts/mongo-shell-like-query

3

Sì, c'è modo, passando il filtro come una stringa. Esempio:

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

È possibile utilizzare anche com.mongodb.util.JSON, ma io non lo consiglio. È meno descrittivo.

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

Si prega di notare che questo potrebbe essere vulnerabile alle iniezioni SQL perché si analizza/costruire il filtro da soli.

Si consiglia di utilizzare Jongo's parameterized query.

Problemi correlati