通过Mongo php查询Meteor.users()

时间:2015-03-15 21:50:38

标签: php mongodb meteor

我试图在php中查询Meteor.users()集合。我到目前为止能够使用电子邮件地址获取用户ID。现在我想将密码添加到查询中,但无法正确构建查询。

这是我到目前为止所做的:

try {
    $mongoDb = $mongoConn->xxxxxxxx;
    $collection = $mongoDb->users;
    //$userQuery = array('emails.address' => $user, "services" => array ( "password" =>  array( "bcrypt"  => $pass )));
    $userQuery = array('emails.address' => $user);
    $arr = $collection->findOne($userQuery);
} catch (MongoException $e) {
    die('Error: ' . $e->getMessage());
}
$id = $arr[_id];

以下是在Mongo中设置密码部分的方法:

"services" : {
    "password" : {
      "bcrypt" : "$2a$10$lYaK1PDTmRTvpddOX5R08Ooupdczktve/qgUMhFvwKfvpPUk3kEH2"
  } 
},
"emails" : [{
  "address" : "demo@demo.com",
  "verified" : false
}]

我已尝试services=>password=>bcrypt的点符号和括号表示法的不同组合,但我到目前为止还无法进入。{1}}关于如何查询该部分的任何想法?

1 个答案:

答案 0 :(得分:0)

"dot notation"语法与您对文档中数组元素的语法完全相同。所以:

    $userQuery = array(
       'emails.address' => $user,
       'services.password.bcrypt' => $pass
    );

那就是你以前的尝试:

"services" => array ( "password" =>  array( "bcrypt"  => $pass ))

应该可以工作,但需要注意的是文档中的对象“必须与所表示的结构完全匹配”而不存在其他“子键”,因为这是您要求查询引擎要求的

您可能遇到的唯一其他问题是,如果您使用“纯文本”密码作为输入,那么您生成的加密字符串与存储的字符串不匹配。

在后一种情况下,您需要测试加密的生成,以找到使用与用于存储数据完全相同的加密散列的方法。但这与用于“查询”数据的语法完全不同。