1

我正在转换mysqlimongodb在基本任务方面遇到一些问题。
这是登录身份验证过程的一部分,如果电子邮件和密码与 dB 中的记录集匹配,我想获取_id并创建会话变量。

这是我到目前为止所拥有的,我所做的所有搜索似乎都有关于_id从不同步骤获取信息的信息,我无法根据我的情况对其进行修改。

另外,如果我的逻辑过于直译mysqli,请我愿意就最佳实践提出建议noSql

$collection = $db->members;
$query = array("email" => $email, "password" => $newpass);
  //$cursor = $collection->findOne($query);  // was told this is better but need deeper understanding
$cursor = $collection->find($query); 
$result = $cursor->count();

if($result==1){
    $_SESSION['email'] = $email;

    //having problems here
    $id = $cursor->findOne(array("_id" => $query['_id']));
    $_SESSION['id'] = $id;

    return true; 
}else 
    return false;

问题_id在验证唯一的用户名和密码后如何获得?

4

2 回答 2

4

您不应该findOne在光标上运行。光标指向上一个查询的结果,您可以使用iterator_to_array获取包含所有找到记录的数组。或者您可以首先使用 findOne() - 它返回实际行

$collection = $db->members;
$query = array("email" => $email, "password" => $newpass);
$result = $collection->findOne($query);

if(!empty($result)){
    $_SESSION['email'] = $email;

    //having problems here
    $id = "" . $result['_id']; // cast to string, as its a MongoId object
    $_SESSION['id'] = $id;

    return true; 
}else 
    return false;
于 2012-08-24T13:55:56.393 回答
4

您可以确保查询的唯一性(这对于登录系统更好)。

所以使用findOne(). 它会给你一个文件。请记住,在 MongoDb 中,您会获得文档或文档游标。

检查文档,您只能退回部分文档。官方文档

$doc = $col->findOne(
       array('pass'=> $pass, 'email'=>$email),//select
       array('_id'=>1)//field selection
);
if ($doc){
   //do your session stuff
}
于 2012-08-24T13:56:18.543 回答