2015-06-03 23 views
8

Tôi có một MongoCollection<Document> trong đó tôi chỉ định một bộ sưu tập. Tôi đang cố tìm người dùng theo id của anh ấy.tìm thấy trong MongoCollection <Document>

user = (Document) usersCollection.find(new Document("_id", username)); 

với điều đó tôi nhận được một lỗi

java.lang.ClassCastException: com.mongodb.FindIterableImpl không thể cast để org.bson.Document

Khi tôi hãy thử

BasicDBObject query = new BasicDBObject(); 
    BasicDBObject fields = new BasicDBObject("_id", username); 
    usersCollection.find(query, fields); 

Tôi gặp lỗi

Phương pháp find (Bson, Class) trong các loại MongoCollection không áp dụng cho các đối số (BasicDBObject, BasicDBObject)

Trả lời

8

Cố gắng để tạo ra một bộ lọc để vượt qua các phương pháp find() để có được một tập hợp con của các tài liệu trong bộ sưu tập của bạn. Ví dụ, để tìm ra tài liệu mà giá trị của lĩnh vực _idtest, bạn sẽ làm như sau:

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

MongoClient client = new MongoClient(); 
MongoDatabase database = client.getDatabase("mydb"); 
MongoCollection<Document> collection = database.getCollection("mycoll"); 
myDoc = collection.find(eq("_id", "test")).first(); 
System.out.println(myDoc.toJson()); 
+0

Tôi có thể tìm toán tử eq() ở đâu? –

+1

@DarshanPuranik 'import static com.mongodb.client.model.Filters.eq;' – Woland

+0

@DarshanPuranik 'eq()' là một phương thức tĩnh và trên các phương thức di chuyển tĩnh, Eclipse không đưa ra một gợi ý nhập khẩu. Trong trường hợp này, bạn cần thêm rõ ràng câu lệnh nhập khẩu và cũng cho tất cả các phương thức tương tự khác. –

-1

Làm điều này -

MongoClient client = new MongoClient(); 
    DBObject resultObject = new BasicDBObject("_id", username); 
    MongoDatabase database = client.getDatabase("DBNAME"); 
    MongoCollection<Document> collection = database.getCollection("COLLECTION_NAME"); 
    DBObject dbObject = new BasicDBObject("_id", username); 
    resultObject = collection.find(dbObject).next(); 
    String result = resultObject.get(YOUR_COLOUM_NAME); 
0

vấn đề của bạn là bạn giả định rằng find() phương thức trả về một đơn Document. Nó không. Nó trả về một danh sách của chúng.

Trong trình điều khiển Java MongoDB 2 có một phương thức trên lớp DBCollection có tên là findOne(). Trong API trình điều khiển Java MongoDB 3, phương thức findOne() không có ở đó. Vì vậy, mã mới của bạn cho việc tìm kiếm chính xác một tài liệu trở nên tương tự như quá này:

collection.find(eq("_id", 3)).first() 

nơi eq("_id", 3) được gọi là một bộ lọc trên bộ sưu tập của bạn.

Các vấn đề liên quan