我有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)
答案 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);