在MongoCollection中找到<document>

时间:2015-06-03 16:11:02

标签: java mongodb

我有MongoCollection<Document>我在其中分配了一个集合。 我想通过他的身份找到一个用户。

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

因为我收到了错误

  

java.lang.ClassCastException:com.mongodb.FindIterableImpl不能   强制转换为org.bson.Document

当我尝试

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

我收到错误

  

MongoCollection类型中的方法find(Bson,Class)不适用于参数(BasicDBObject,BasicDBObject)

5 个答案:

答案 0 :(得分:13)

尝试创建一个过滤器以传递到find()方法,以获取集合中的文档子集。例如,要查找_id字段的值为test的文档,您可以执行以下操作:

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());

答案 1 :(得分:1)

您的问题是您假设find()方法返回单个Document。它没有。它返回一个列表。

在MongoDB 2 Java驱动程序中,名为DBCollection的{​​{1}}类上有一个方法。在MongoDB 3 Java驱动程序API中,findOne()方法不存在。因此,用于查找一个文档的新代码也与此类似:

findOne()

其中collection.find(eq("_id", 3)).first() 在您的集合中称为过滤器。

答案 2 :(得分:0)

MongoCollection<Document> filterCriteriaDoc = mongoDatabase.getCollection("documentName");

Document filterDoc = new Document();

filterDoc.put("col1", "value");

filterDoc.append("col2", "value");

filterDoc.append("col2", "value");

Iterator<Document> iter = filterCriteriaDoc.find(filterDoc).iterator(); 

iter.next()可以给您提供文档。

答案 3 :(得分:0)

如果您在此处使用IP连接到MongoDb,则如何更改 HEREYOURIP

导入静态com.mongodb.client.model.Filters.eq;

public static Document GetDocumentFromDataBase(String dataBase,String DBcollection,String field, String value) {
MongoClient mongoClient = new MongoClient(  " HEREYOURIP ",27017 );
MongoDatabase database =  mongoClient.getDatabase(dataBase);
MongoCollection<Document> collection = database.getCollection(DBcollection);
Document myDoc = collection.find(eq(field, value)).first();
    mongoClient.close();
    return myDoc;}

编辑发现了另一种方式

public static String GetFromDB(String DATABASE_NAME,String collectionName, String field, String value) {
        String valueBack;
        BasicDBObject whereQuery = new BasicDBObject();
        whereQuery.put("_id", new ObjectId(value));
        
        MongoClient mongoClient = new MongoClient(System.getenv("HERE_YOUR_DB_IP"), 27017);
        MongoDatabase database = mongoClient.getDatabase(DATABASE_NAME);
        MongoCollection<Document> collection = database.getCollection(collectionName);
        Document myDoc = collection.find(whereQuery).first();
        if (myDoc != null) {

            valueBack = myDoc.toString();
            mongoClient.close();
            return valueBack;
        }
        mongoClient.close();
        return null;

    }

答案 4 :(得分:-1)

这样做 -

 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);