如何在php中查询mongo?

时间:2011-03-17 04:02:33

标签: php mongodb mongodb-php

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

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 个答案:

答案 0 :(得分: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 :(得分:1)

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