Javaを介してmongoのようなクエリを直接実行する方法があるかどうか疑問に思っていました。つまり、mongoDBのようなクエリを文字列としてJavaドライバーの文字列オブジェクトおよびDBCursorオブジェクトとしてのmongoDBが返されます。次のようなものです。
_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にありますか?ありがとう。
ここで示したのは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:スコットヘルナンデスはJSON.parse
について指摘しました。
はい、フィルターを文字列として渡す方法があります。例:
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のパラメータ化されたクエリ を使用することをお勧めします。
Jongoライブラリ を見てください-コマンドライン構文を使用して、かなり高度なクエリを実行することもできます。
また、BasicDBObjectsのリストではなく、非常に高速なGSONマッパーを使用して、クエリの結果として独自のオブジェクトを返します。
Mongo-Shell-like-queryユーティリティ(jar)を使用することをお勧めします。これにより、mongoコマンドShellと同じ構文を使用して、Java(またはscala)コードでmongoクエリを記述できます。具体的には、mongoクエリを文字列形式で記述できます。アグリゲーションパイプラインなどの高度な機能をサポートしています。 https://github.com/EqualExperts/mongo-Shell-like-query をご覧ください。
チュートリアルの例に従うことができます:
http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery
文字列ではなく、(Basic)DBObjectを使用してクエリを作成していることに注意してください。