MongoDB findOne не возвращает ничего

Согласно странице PHP mongo для findOne, это должно работать нормально, но это не так.

$email = array('email' => $_POST['email']; $conn = new MongoClient("mongodb://localhost:27017/"); $xyz = $conn->database->users; $cursor = $xyz->findOne($email); print_r ($cursor); 

Это работает при использовании метода find вместо findOne.

 $email = array('email'=>$_POST['email']); $pass = $_POST['password']; $conn = new MongoClient( 'localhost' ); $db = $conn->database; $collection = new MongoCollection($db, 'users'); $cursor = $collection->find($email); foreach ($cursor as $obj){ $test = $obj['email']; print_r($test); } 

Может кто-нибудь объяснить, почему это происходит?

findOne () не возвращает курсор, как find (), – пожалуйста, проверьте документацию здесь:

http://www.php.net//manual/en/mongocollection.findone.php

Кроме того, у вас, похоже, есть синтаксическая ошибка в вашем коде, вам не хватает правильных круглых скобок в первой строке. Кроме того, использование переменных с именем «курсор», когда он не возвращает курсор, как правило, является плохой идеей, так как вызывает путаницу для тех, кто просматривает код.

Наконец, вы используете разные подходы между двумя примерами кода – разные имена переменных, разные строки, переданные MongoClient (), один использует вызов MongoCollection (), а другой нет, и т. Д. – очень легко для проблем возникать в этих различиях ,

Принимая во внимание все это, я бы предложил следующее:

 # Add right ) at end of following statement $email = array('email' => $_POST['email']); $conn = new MongoClient("mongodb://localhost:27017/"); $db = $conn->database; $collection = new MongoCollection($db, 'users'); $findoneResult = $collection->findOne($email); print_r ($findOneResult);