2016-08-03 2 views
0

Ich habe zwei Meteorfunktionen, die Mongo Collection-Abfragen verwenden.

Die Funktion Course_list funktioniert ordnungsgemäß und gibt eine Liste der Course-Objekte aus der Courses-Auflistung zurück. Die Funktion "studentsInCourse" druckt jedoch ein Array ordnungsgemäß aus, wenn ich userIdArray protokolliere, aber nur ein Benutzerobjekt in userArray platziert. Dies entspricht der _id des letzten Objekts in userIdArray. Diese Funktionen sehen für mich identisch aus und ich verstehe nicht, warum sie anders zurückkehren.

Antwort

1

vom Meteor.users Abschnitt der Meteor API-Dokumentation Genommen:

Wie alle Mongo.Collections, Sie alle Dokumente auf dem Server zugreifen können, sondern nur von dem Server sind diejenigen, die speziell auf dem Client verfügbar veröffentlicht.

Wenn Sie angemeldet sind und die folgende von der Client-Seite

Meteor.users.find({ 
    _id: { 
    $in: userIdArray 
    } 
}).map((c) => { return c }); 

dann standardmäßig Meteor.users.find() wird nur zurückkehren Ihre Login Benutzerdaten aufrufen (dies ist eine Sicherheitsfunktion - Sie wouldn‘ Ich möchte, dass die Benutzer eine Liste aller Benutzer erhalten können). Also bezieht sich Ihr Cursor auf höchstens einen Benutzer. Wenn sich Ihr angemeldeter Benutzer _id in der userIdArray befindet, führen Sie die zugehörige map-Funktion nur für diesen Benutzer aus, weshalb nur ein Benutzerobjekt zurückgegeben wird.

Wenn Sie dies für alle Benutzer auf der Clientseite ausführen möchten, sollten Sie sich damit befassen, eigene Subskriptionen/Publikationen für das Senden der Benutzerdaten an den Client einzurichten (oder Meteor-Methoden zu verwenden) Um etwas Ähnliches zu erreichen, können Sie eine Methode erstellen, um alle übereinstimmenden Benutzer zu finden und zurückzugeben.

+0

Das ist genau das, was passiert. Danke für diesen Auszug! –

Verwandte Themen