我试图用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教程页面上看到了一些查询示例,但是我真的不明白......
有什么想法吗?谢谢
答案 0 :(得分:7)
太棒了,你会爱上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()here的更多信息。
答案 1 :(得分:3)
您可以直接查询所需数据:
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()方法返回的结果数,以确保只有单个记录与您的查询匹配。