2012-11-26 9 views
5

Ich versuche, Benutzer von E-Mail mit dem folgenden Befehl zur Abfrage Meteor.users.findOne({'emails.address': '[email protected]'});Meteor Querying andere Benutzer per E-Mail

Es funktioniert in der Mongo Shell, aber es gibt undefined zurück in Meteor.

Irgendwelche Ideen?

UPDATE

Es stellte sich heraus, dass ich nicht in der Lage bin anderer Benutzer abzufragen. Die gleiche Abfrage funktioniert, wenn ich die E-Mail des angemeldeten Benutzers abfrage. Also die Frage, wie kann ich jetzt auf alle Benutzer abfragen?

Antwort

12

standardmäßig sehen, Meteor veröffentlicht nur der angemeldete Benutzer und Sie können, wie Sie erwähnen, Abfragen für diesen Benutzer. Um die anderen Benutzer zugreifen, die Sie auf dem Server zu veröffentlichen haben:

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

Und ihnen auf dem Client abonnieren:

Meteor.subscribe('allUsers'); 

Denken Sie auch daran, dass Sie nicht alle veröffentlichen möchten die Felder Sie können so festlegen, welche Felder Sie veröffentlichen möchten/nicht veröffentlichen:

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

Sobald Sie die Sammlung veröffentlicht haben, können Sie Abfragen und Zugang zu Informationen für alle Nutzer ausgeführt werden.

+1

Das war es. Ich habe das Beispiel der Parteien verfolgt und nicht realisiert, dass sie das veröffentlicht haben, aber sie haben es "Verzeichnis" genannt. Vielen Dank! –

4

Dies kann hilfreich sein:

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

Auch Advance Queries

+1

Ihre Regex funktioniert nicht für Benutzer mit E-Mail-Adressen wie 'bob + 1 @ beispiel.com. – Luke

1

Zuerst müssen Sie die Benutzer veröffentlichen, wie oben erwähnt Antwort und führen Sie den folgenden Befehl

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

ODER

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

Wie Meteor schreibt standardmäßig E-Mail in Array mit Feld 'Adresse', nur hinzugefügt, und es funktioniert wie Charme: '' 'Meteor.users.findOne ({"emails.address": "mich @ example.com "}) '' '(nachdem alle Benutzer veröffentlicht wurden, mit beschränkten Sicherheitsfeldern, wie oben erwähnt, dann Abonnieren). –