MongoDB findOne没有返回任何内容

时间:2014-06-09 21:04:16

标签: php mongodb database

根据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); }

有人可以解释为什么会这样吗?

1 个答案:

答案 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);