如何在PHP中查询Mongo数据库?

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中的正确语法是什么?

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 已经有些生疏了)


1

尝试

return count($collection->find(array('name' => $name, 'password' => $password)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接