在mongodb集合中查找一些值?

时间:2011-11-30 14:44:18

标签: java mongodb collections nosql

我试图用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教程页面上看到了一些查询示例,但是我真的不明白......

有什么想法吗?谢谢

2 个答案:

答案 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()方法返回的结果数,以确保只有单个记录与您的查询匹配。