5

所以我有这个简单的登录功能,它试图将电子邮件地址与数据库中的密码进行匹配,并将其与用户通过表单输入的数据进行比较。

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 "</pre>";
}

我不明白为什么 find() 只返回一个游标对象。答案?

这是 mongo 文档

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

我将如何进行“WHERE”查询以在同一文档中找到电子邮件和密码?我显然没有让 find() 和 findOne() 查询的参数正确。PHP中的正确语法是什么?

4

2 回答 2

5

find应该返回一个光标 - 你可以在这里阅读更多关于它们的信息:http ://www.mongodb.org/display/DOCS/Queries+and+Cursors 。要从光标处获取文档,您必须对其进行迭代。

就您而言,findOne这可能是您所追求的,因为您不希望多个用户具有相同的用户名和密码。findOne 函数总是最多返回一个文档,因此不需要游标。

要在查询中有多个谓词,只需在查询数组中添加更多字段:

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

(如果这是正确的 PHP - 我的 PHP 有点生锈)

于 2011-03-17T11:05:15.530 回答
1

尝试

return count($collection->find(array('name' => $name, 'password' => $password)));
于 2011-10-26T15:06:51.153 回答