Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

find in MongoCollection<Document>

Tags:

java

mongodb

I have a MongoCollection<Document> in which I assign a collection. I'm trying to find a user by his id.

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

with that I'm getting an error

java.lang.ClassCastException: com.mongodb.FindIterableImpl cannot be cast to org.bson.Document

When I try

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

I'm getting an error

The method find(Bson, Class) in the type MongoCollection is not applicable for the arguments (BasicDBObject, BasicDBObject)

like image 584
jimakos17 Avatar asked Jun 03 '15 16:06

jimakos17


1 Answers

Your issue is that you assume that the find() method returns a single Document. It doesn't. It returns a list of them.

In MongoDB 2 Java driver there was a method on the DBCollection class named findOne(). In the MongoDB 3 Java driver API, the findOne() method isn't there. So your new code for finding exactly one document becomes similar too this one:

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

where eq("_id", 3) is called a filter on your collection.

like image 154
aahoogendoorn Avatar answered Oct 04 '22 21:10

aahoogendoorn