2012-11-26 4 views
5

J'essaie d'interroger les utilisateurs par e-mails avec la commande suivante Meteor.users.findOne({'emails.address': '[email protected]'});Meteor Interrogation d'autres utilisateurs par e-mail

Il travaille dans le shell mongo mais elle retourne non définie dans Meteor.

Des idées?

MISE À JOUR

Tourné que je ne suis pas en mesure d'interroger d'autres utilisateurs. La même requête fonctionne lorsque j'interroge l'e-mail de l'utilisateur connecté. Donc, la question maintenant comment puis-je interroger tous les utilisateurs?

Répondre

12

Par défaut, Meteor ne publie que l'utilisateur connecté et vous pouvez, comme vous le mentionnez, exécuter des requêtes sur cet utilisateur. Pour accéder aux autres utilisateurs que vous avez à les publier sur le serveur:

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

Et abonnez-vous à eux sur le client:

Meteor.subscribe('allUsers'); 

Gardez à l'esprit que vous voudrez peut-être de ne pas publier tous les champs afin que vous pouvez spécifier quels champs vous souhaitez publier/ne pas publier:

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

Une fois que vous avez publié la collection, vous pouvez exécuter des requêtes et des informations d'accès pour tous les utilisateurs.

+1

C'était ça. Je suivais l'exemple des parties et je ne savais pas qu'ils publiaient cela, mais ils l'appelaient 'répertoire'. Merci! –

4

Cela peut être utile:

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

Voir aussi Advance Queries

+1

Votre regex ne fonctionne pas pour les utilisateurs avec des adresses de messagerie tels que 'bob + 1 @ example.com'. – Luke

1

Tout d'abord vous devez publier les utilisateurs, comme mentionné ci-dessus réponse et exécutez la commande suivante

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

OU

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

Comme Meteor met par défaut l'adresse e-mail de connexion dans le tableau avec le champ 'adresse', juste ajouté ce qui suit et ça fonctionne comme charme: '' 'Meteor.users.findOne ({"emails.0.address": "moi @ example.com "}) '' '(après avoir publié tous les utilisateurs, avec des champs déclarés limités pour la sécurité comme mentionné ci-dessus, puis en s'abonnant). –

Questions connexes