2011-02-01 9 views
14

Javaを介して直接mongoのようなクエリを実行する方法があるかどうか、私は疑問に思っていました。つまり、mongoDBをmongoDBのJavaドライバの関数DBCursorオブジェクトが返されます。Javaを介してMongoのようなクエリ(JSON)を実行する

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); 
     } 
} 
} 

注:ような何かexecuteQuery()は機能で構築されていません。デモの目的でのみ使用されています。 したがって、json文字列をBasicDBObjectインスタンスに変換する関数がJava APIにありますか?ありがとう。

+5

あなたはそれをどのように使用しましたか?私はこれについて面白いです – jjmartinez

+0

このリンクをチェックすることができます。 これは役に立ちます。 https://stackoverflow.com/questions/47093563/how-to-execute-mongodb-native-query-json-using-mongo-java-driver-only/47097555#47097555 –

答えて

7

ここに示した内容はJSONではありません。組み込みMongoDBシェルのJavascriptコードです。何らかの理由でJava環境内でコードを実行する必要がある場合は、Javascriptエンジン(Rhinoなど)を組み込み、互換性のあるAPIを実装する必要があります。

それ以外の場合は、JSONをDBObjectに変換する必要があります。これはJSON.parse()メソッドまたはJacksonなどのJSONマッピングライブラリで行うことができます。 MongoDBは、JSONにはないデータ型の拡張セットを使用しています。http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions

UPD:Scott Hernandezは約JSON.parseを指摘しました。

+0

JSON.parse()メソッドがあります。 JSON文字列をDBObjectに変換します。 –

+0

ありがとうございました。ええ、MongoDBライブラリで提供されているJSONパーサーをJava用に試しました。可能であれば、私はRhinoについてもう少し詳しくお聞かせください。 –

1

Jongo libraryを見ると、コマンドライン構文を使用してかなり高度なクエリを実行することもできます。

また、非常に高速なGSONマッパーを使用して、BasicDBObjectsのリストではなく、クエリの結果として自分のオブジェクトを返すことができます。

1

mongo-shell-like-queryユーティリティ(jar)を使用することをお勧めします。 mongoコマンドシェルと同じ構文を使用して、Java(またはscala)コードでmongoクエリを書くことができます。具体的には、文字列形式でmongoクエリを書くことができます。また、集約パイプラインなどの高度な機能もサポートしています。 見てください https://github.com/EqualExperts/mongo-shell-like-query

3

はい、フィルタを文字列として渡す方法があります。例:

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

com.mongodb.util.JSONも使用できますが、お勧めしません。あまり説明的ではありません。

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

フィルタを自分で解析/ビルドするため、SQLインジェクションの影響を受ける可能性があることに注意してください。

Jongo's parameterized queryをお勧めします。

関連する問題