Как запросить монго в php? - PullRequest
5 голосов
/ 17 марта 2011

Итак, у меня есть эта простая функция входа в систему, которая пытается сопоставить адрес электронной почты с паролем в базе данных и сравнить его с данными, введенными пользователем через форму.

<code>function login($email, $password){
    $m = new Mongo("localhost"); 
    $m->connect();
    $db = $m->users;
    $collection = $db->test_collection;

    echo "<pre>";
    var_dump($collection->findOne(array('name' => 'john'))); //returns correctly
    var_dump($collection->find(array('name' => 'john'))); //returns mongo cursor object
    echo "
";}

Я не понимаю, почему find () возвращает только объект курсора. Ответы?

Это монго-документ

array(5) {
  ["_id"]=>
  object(MongoId)#22 (1) {
    ["$id"]=>"4d7eaa848baf84d32b000000"
  }
  ["activated"]=> (true)
  ["email"]=> "john@smith.com"
  ["name"]=> "john"
  ["password"]=> "334c4a4c42fdb79d7ebc3e73b517e6f8"
}

Как мне выполнить запрос "ГДЕ", который бы нашел и адрес электронной почты, и пароль в одном и том же документе? Я явно не получаю правильные параметры для запросов find () и findOne ().правильный синтаксис в PHP?

Ответы [ 2 ]

5 голосов
/ 17 марта 2011

find должен возвращать курсор - о них вы можете прочитать здесь: http://www.mongodb.org/display/DOCS/Queries+and+Cursors.Чтобы получить документы из курсора, вам придется выполнить итерации по нему.

В вашем случае, findOne, вероятно, то, что вам нужно, поскольку вы не ожидаете, что несколько пользователей с одинаковыми именем пользователя и паролем.Функция findOne всегда возвращает максимум один документ, поэтому курсор не нужен.

Чтобы иметь несколько предикатов в запросах, просто добавьте больше полей в массив запросов:

var_dump($collection->findOne(array('name' => 'john', 'password' => '334c4a4c42fdb79d7ebc3e73b517e6f8')));

(Если это правильный PHP - мой PHP немного ржавый)

1 голос
/ 26 октября 2011

1001 * попробовать *

return count($collection->find(array('name' => $name, 'password' => $password)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...