在mongodb集合中查找一些值?

我试图用java读取(mongo)用户数据库。 在教程页面上,我看到了如何阅读整个集合。 我可以这样做:

DBCursor cursor = col.find(); while (cursor.hasNext()) { System.out.println(cursor.next()); } 

现在,如果我有一个用户集合:=姓名,年龄,密码(…)等等。 现在我想找一个带密码的名字。 例如,对于登录过程。 假设我有两个字符串:String n和p。 如果数据库中有user.equals(n)和password.equals(p),则登录用户。 我该如何更换光标? 我在mongodb java教程页面上看到了一些查询示例,但是我真的不明白……

有任何想法吗? 谢谢

太棒了,你会爱上Mongo。

在您发布的示例中,程序会迭代一组结果。 在用户/密码问题中,您描述的实际操作是根据某些条件获取一个文档(而不是一组文档)。

在shell上看起来像这样:

 n = "login" p = "password" db.users.findOne({ user: n, password: p}) 

请注意我正在使用findOne而不是find将文档而不是光标返回到许多文档。

现在,让我们来看看java驱动程序的示例:

 BasicDBObject query = new BasicDBObject(); query.put("i", 71); cur = coll.find(query); while(cur.hasNext()) { System.out.println(cur.next()); } 

BasicDBObject创建查询对象,然后您将不同的条件放在一起形成您的查询。

所以不是query.put("i", 71); 你会做类似的事情:

 query.put("user", n) query.put("password", p) 

而…而不是while循环只使用findOne而不是find,所以你不必迭代1个对象的结果集(无意义)。

您可以在此处阅读有关findOne()的更多信息。

您可以直接查询所需数据:

 BasicDBObject query = new BasicDBObject(); query.put("name", "user"); query.put("password", "[YOUR ENCRYPTED PASSWORD HERE]"); DBCollection collection = db.getCollection("yourcollectionname"); DBCursor cursor = collection.find(query); while (cursor.hasNext()) { //do something with cursor.next(); } 

如建议您需要检查find()方法返回的结果计数,以确保只有单个记录与您的查询匹配。