2012-11-26 11 views
5

Próbuję kwerendy użytkownikom e-maili za pomocą następującego polecenia Meteor.users.findOne({'emails.address': '[email protected]'});Meteor odpytywanie innych użytkowników przez e-mail

To działa w powłoce Mongo ale zwraca niezdefiniowane w Meteor.

Wszelkie pomysły?

UPDATE

okazało się, że nie jestem w stanie zapytać innych użytkowników. To samo zapytanie działa, gdy wyślę do zalogowanego użytkownika e-mail. Więc pytanie, w jaki sposób mogę zapytać o wszystkich użytkowników?

Odpowiedz

12

Domyślnie Meteor publikuje tylko zalogowany użytkownik i można, tak jak wspomniałeś, uruchamiania kwerend przeciwko tego użytkownika. W celu uzyskania dostępu do innych użytkowników, musisz opublikować je na serwerze:

Meteor.publish("allUsers", function() { 
    return Meteor.users.find({}); 
}); 

i zapisz się do nich na kliencie:

Meteor.subscribe('allUsers'); 

Należy także pamiętać, że możesz nie chcieć, aby opublikować wszystko pola, dzięki czemu można określić, jakie pola chcesz opublikować/nie publikuje:

return Meteor.users.find({}, 
{ 
    // specific fields to return 
    'profile.email': 1, 
    'profile.name': 1, 
    'profile.createdAt': 1 
}); 

po opublikował zbiór, można uruchomić zapytań i dostęp do informacji dla wszystkich użytkowników.

+1

To było to. Podążałem za przykładem stron i nie zdawałem sobie sprawy, że opublikowali to, ale nazwali to "katalogiem". Dzięki! –

4

To może być pomocne:

var text = "[email protected]"; 
Meteor.users.findOne({'emails.address': {$regex:text,$options:'i'}}); 

zobaczyć również Advance Queries

+1

Twój regex nie działa dla użytkowników z adresami e-mail, takich jak 'bob + 1 @ example.com'. – Luke

1

Najpierw trzeba opublikować użytkowników, jak wspomniano powyżej odpowiedzi i uruchom następujące polecenie

Meteor.users.find({"emails": "[email protected]"}).fetch() 

LUB

Meteor.users.find({"emails.0": "[email protected]"}).fetch() 
+0

Jako że Meteor domyślnie podaje adres e-mail logowania w tablicy z polem "address", po prostu dodaje następujące i działa jak charm: '' 'Meteor.users.findOne ({"emaile.address": "me @ example.com "})" "(po opublikowaniu wszystkich użytkowników, z ograniczonymi zadeklarowanymi polami bezpieczeństwa jak wspomniano powyżej, a następnie subskrybowaniem). –

Powiązane problemy