21

Javaを介してmongolikequeryを直接実行する方法があるかどうか疑問に思いました。つまり、mongoDB like queryを文字列としてmongoDBのJavaドライバーの関数に文字列オブジェクトとして指定すると、DBCursorオブジェクトが返されます。何かのようなもの:

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にありますか?ありがとう。

4

5 に答える 5

12

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

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 のパラメーター化されたクエリを使用することをお勧めします。

于 2016-09-15T13:04:56.173 に答える
9

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

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

UPD: Scott Hernandez が について指摘しましたJSON.parse

于 2011-02-01T11:21:17.713 に答える
1

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

于 2013-07-19T14:05:03.017 に答える
0

チュートリアルの例に従うことができます。

http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery

文字列ではなく、(Basic)DBObject を使用してクエリを作成していることに注意してください。

于 2011-02-01T18:09:42.667 に答える