Ответ 1
Если на сервере у Meteor есть специальная функция для этого: Accounts.findUserByEmail(электронная почта).
Я считаю, что это рекомендуется.
В моем приложении meteor.js я пытаюсь написать простую страницу администратора, которая может найти пользователя по его/ее адресу электронной почты.
Я вижу, что в коллекции Meteor.users есть массив "emails", у которого есть такие объекты
{ address : '[email protected]',
verified : false
}
Обычно в Mongodb я могу искать внутри этого массива "emails" следующим образом:
Meteor.users.find({ emails.address : '[email protected]' });
Но этот запрос выдает ошибку:
While building the application:
client/admin.js:224:41: Unexpected token .
Aka Meteor не нравится вложенный запрос...
Любые идеи о том, как запросить коллекцию Meteor.users по электронной почте?
Если на сервере у Meteor есть специальная функция для этого: Accounts.findUserByEmail(электронная почта).
Я считаю, что это рекомендуется.
Вы также можете использовать то, что у вас было, просто введите его в кавычки:
Meteor.users.find({ "emails.address" : '[email protected]' });
Электронная почта содержит массив писем. Каждое письмо имеет адрес.
Попробуйте { emails: { $elemMatch: { address: "[email protected]" } } }
.
Информация о $elemMatch
здесь.
Информация по электронной почте как массив здесь.
По умолчанию Meteor публикует только зарегистрированного пользователя, и вы можете, как вы говорите, запускать запросы к этому пользователю. Чтобы получить доступ к другим пользователям, вы должны опубликовать их на сервере:
Meteor.publish("allUsers", function () {
return Meteor.users.find({});
});
И подпишитесь на них на клиенте:
Meteor.subscribe('allUsers');
И запустите следующую команду
Meteor.users.find({"emails": "[email protected]"}).fetch()
ИЛИ
Meteor.users.find({"emails.0": "[email protected]"}).fetch()
Если вы хотите найти все письма внутри массива Учетные записи и сделать нечувствительный запрос:
const hasUser = Meteor.users.findOne({
emails: {
$elemMatch: {
address: {
$regex : new RegExp(doc.email, "i")
}
}
}
});
Одним из возможных способов обхода решения, если это работает на сервере, но не с клиентом, является использование метода users_by_email
на сервере:
if (Meteor.isServer) {
Meteor.methods({
'get_users_by_email': function(email) {
return Users.find({ emails.address: email }).fetch();
}
});
}
if (Meteor.isClient) {
foo_users = Meteor.call('get_users_by_email', '[email protected]');
}