2017-10-24 4 views
1

私はJavaとMongoDBを初めて使用していますが、数時間もかかっていますが、Java Mongodb-Driverクライアント3.2.2を使用して簡単なドキュメントを簡単に取得できません。JavaでMongoDB MongoClientを使用して1つのドキュメントを取得する8

Document profile = collection.find(new Document("_id", 10)); 

私はコンパイル時にしかし、私は次のエラーを取得:今

Java:incompatible types: com.mongodb.client.Finditerable<org.bson.Document> cannot be converted to org.bson.Document 

を次のように

私の問題行があるなど

接続は大丈夫です、私はコレクションを見ることができます私はこれを少しでもグーグルグーグルとして得ることができますStack Overflowは動作するが、不必要に複雑に思える次のコードを生成します:

Document profile = collection.find(new Document("_id", 10)).projection(Projections.fields(Projections.include("firstName")))).first(); 

私は、タイプをBasicDBObjectに変更しようとしたが、運がないと困惑しています。

Document profile = collection 
     .find(new Document("_id", 10)) 
     .first(); 

find戻りFindIterableは、したがって、あなたがDocumentを取得するためにfirst()を呼び出す必要があることに注意してください:次のことを試してください -

答えて

2

あなたは、直接ではない1以上のDocumentオブジェクト、FindIterableを返しfind発見したとして、あなたはprojection、ちょうど

Document profile = collection.find(new Document("_id", 10)).first(); 

交互に...

import static com.mongodb.client.model.Filters.eq; 
// other code removed 
Document profile = collection.find(eq("_id", 10)).first(); 

を必要としません。これは最初は迷惑ですが、非常に強力で便利です。複数の条件でフィルタリングするに

は、ここで私は何をすべきかです:

List<Bson> filters = new ArrayList<>(); 
filters.add(eq("department", dept)); 
filters.add(gt("salary", threshold)); 
// etc. 
List<Document> docs = collection.find(and(filters)).into(new ArrayList<>()); 
+0

これは非常に参考になりました。特に、次のプロジェクトのためにArrayListsと闘わなければならないためです。 – albatross

+1

だからこそ私はそれを投げました...私はコレクションがあなたの将来にあることを知っていました:)もう1つのヒントはジェネリックを活用しています。 'MongoCollection collection'の代わりに' MongoCollection collection'を使用してください。 – Paul

2

コンパイラは、問題がある正確に何を説明します。

私はまた、thisチュートリアルを読むことをお勧めします - あなたは多くを学ぶでしょう。

+0

おかげで、私はいくつかの点でそのチュートリアルを読んで確信しているが、私は再びそれを読み込みます。 – albatross

関連する問題