Найти какие-то значения в коллекции mongodb? - PullRequest
4 голосов
/ 30 ноября 2011

Я пытаюсь прочитать (монго) базу данных пользователей с Java. На странице учебника я увидел, как читать всю коллекцию. Я могу сделать что-то подобное:

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

Теперь, если у меня есть коллекция с пользователями: = имя, возраст, пароль (...) и все такое. Теперь я хотел бы найти имя с паролем. Например, для процесса входа в систему. Допустим, у меня есть две строки: строка n и p. Если в базе данных есть user.equals (n) и password.equals (p), войдите в систему user. Как мне изменить курсор? Я видел несколько примеров запросов на странице учебника по Java на mongodb, но я действительно не понимаю ...

Есть идеи? Спасибо

Ответы [ 2 ]

7 голосов
/ 30 ноября 2011

Круто, ты будешь любить Монго.

В примере, который вы разместили, программа просматривает набор результатов. В проблеме пользователя / пароля вы описываете, что вы на самом деле пытаетесь сделать, это получить один документ (не набор документов) на основе некоторых критериев.

На оболочке, которая будет выглядеть так:

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 () вы можете прочитать здесь .

3 голосов
/ 30 ноября 2011

Вы можете запросить нужные данные напрямую:

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 (), чтобы убедиться, что только одна запись соответствует вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...