根据findOne的PHP mongo页面,这应该可以正常工作但不是。
$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); }
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
findOne()不会像find()那样返回游标 - 请查看此处的文档:
http://www.php.net//manual/en/mongocollection.findone.php
此外,您的代码中似乎有语法错误,您在第一行中缺少右括号。另外,使用名为" $ cursor"的变量。当它没有返回光标往往是一个坏主意,因为它会导致查看代码的人混淆。
最后,您在两个代码示例之间使用了不同的方法 - 不同的变量名称,传递给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);