Я пытаюсь запросить коллекцию Meteor.users () в php. Я до сих пор могу получить идентификатор пользователя, используя адрес электронной почты. Теперь я хочу добавить пароль к запросу, но не могу правильно построить запрос.
Вот что у меня так далеко:
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" : "[email protected]",
"verified" : false
}]
Я пробовал разные комбинации обозначений точек и скобок для services=>password=>bcrypt
но я пока не могу туда попасть. Любые идеи о том, как запросить эту часть?
«точечная нотация» синтаксис точно такой же, как вы сделали для элемента массива в документе. Так:
$userQuery = array(
'emails.address' => $user,
'services.password.bcrypt' => $pass
);
Тем не менее, ваша предыдущая попытка:
"services" => array ( "password" => array( "bcrypt" => $pass ))
Должно работать, но с оговоркой, что объект в документе «должен точно соответствовать» представленной структуре без других «подключей», поскольку это то, о чем вы просите механизм запросов.
Единственная другая проблема, с которой вы, вероятно, можете столкнуться, это то, что если вы работаете с паролем «простого текста» в качестве входных данных, то генерируемая вами зашифрованная строка не соответствует той, которая хранится.
В последнем случае вам нужно будет проверить ваше зашифрованное поколение, чтобы найти метод, который использует точно такое же хеширование шифрования, что и то, что используется для хранения данных. Но это совершенно другой вопрос к синтаксису, используемому для «запроса» данных.
Других решений пока нет …