所以我有这个简单的登录功能,试图将电子邮件地址与数据库中的密码匹配,并通过表单将其与用户输入的数据进行比较。
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中的正确语法是什么?
答案 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)));