Подтвердить что ты не робот

Meteor.js: найти пользователей по электронной почте

В моем приложении 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 по электронной почте?

4b9b3361

Ответ 2

Вы также можете использовать то, что у вас было, просто введите его в кавычки:

Meteor.users.find({ "emails.address" : '[email protected]' });

Ответ 3

Электронная почта содержит массив писем. Каждое письмо имеет адрес.

Попробуйте { emails: { $elemMatch: { address: "[email protected]" } } }.

Информация о $elemMatch здесь.

Информация по электронной почте как массив здесь.

Ответ 4

По умолчанию 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()

Обратитесь к этому вопросу

Ответ 5

Если вы хотите найти все письма внутри массива Учетные записи и сделать нечувствительный запрос:

const hasUser = Meteor.users.findOne({
    emails: {
      $elemMatch: {
        address: {
          $regex : new RegExp(doc.email, "i")
        }
      }
    }
});

Ответ 6

Одним из возможных способов обхода решения, если это работает на сервере, но не с клиентом, является использование метода 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]');
}