2017-09-23 17 views
1

私はmongodb tutorial for javaにmongo collectionからの問い合わせ方法を見つけましたが、彼らが使用しているeqは私のためには機能しません! mongoとjavaを使ってコレクションから文書をフィルタリングする方法を知っていますか?mongo-java-driverにeqが存在しないのはなぜですか?

package Database; 

import org.bson.Document; 

import com.mongodb.MongoClient; 
import com.mongodb.MongoClientURI; 
import com.mongodb.client.FindIterable; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 

public class StackOverflow { 

    public static void main(String[] args) { 

     // insert something to mongo: 
     final String URI = "mongodb://localhost:27017"; 
     final String DB = "StackOverflowQuestion"; 
     final String COLLECTION = "eqDoesntExcist"; 

     MongoClientURI connection = new MongoClientURI(URI); 
     MongoClient mongo = new MongoClient(connection); 
     MongoDatabase database = mongo.getDatabase(DB); 
     MongoCollection<Document> collection = database.getCollection(COLLECTION); 

     Document doc = new Document("name", "Troy").append("height", 185); 
     collection.insertOne(doc); 

     doc = new Document("name", "Ann").append("height", 175); 
     collection.insertOne(doc); 

     // read something from mongo 
     FindIterable<Document> findIt = collection.find(eq("name", "Troy")); 
     // ERROR!!! the method eq(String, String) is undefined! 

     mongo.close(); 

    } 

} 

私のような何かをしたい:

この

は私の試みで、コンパイラは、あなたのクラス StackOverflowに期待していますので、

collection.find(eq("name", "Troy")); 

SELECT * from eqDoesntExcist WHERE name = "Troy" 

答えて

2

はあなたのようにそこにeqFilterを使用することができるかもしれないもの、あなたが​​

public static <TItem> Bson eq(String fieldName, Item value) 

に定義されている探している:他に

Bson bsonFilter = Filters.eq("name", "Troy"); 
FindIterable<Document> findIt = collection.find(bsonFilter); 

かドキュメントが提案する方法を見て、それを静的にインポートする方法HODコールFilters.eq

import static com.mongodb.client.model.Filters.eq; 

、さらにあなたとコードの同じ部分を使用します。

FindIterable<Document> findIt = collection.find(eq("name", "Troy")); // static import is the key to such syntax 
+0

なぜ彼らのチュートリアルは間違っていますか? –

+0

@WWチュートリアルは間違いではなく、答えを更新しました。このような形式を使用するには、使用中のメソッドの静的なインポートを含める必要があります。あなたのケースでは 'Filters.eq'。 – nullpointer

0

あなたはこれを行うことはできませんeqという名前のメソッドで、これは必要なものではありません。

ので、

collection.find(Filters.eq("name", "Troy")); 
+0

だから、彼らのチュートリアルが間違っている理由は? –

+0

はありません....メソッドは静的で、おそらくそれらはそのクラスを静的にインポートしています.... –

関連する問題