Ich habe versucht, auf der Suche nach einer Antwort überall aber kann nicht scheinen, dass das funktioniert. Ich benutze Meteor mit Cordova, um eine mobile App zu erstellen.Meteor: Wie sollte ich die Benutzersammlung aktualisieren, um ein neues Attribut in das Objekt/Wörterbuch aufzunehmen?
Ich möchte ein Attribut zu meiner Benutzer-Sammlung hinzufügen (das Meteor erstellt, wenn ich eingeloggt bin). dh. Zum Beispiel möchte ich {currentHotel: "Something"} zu meiner db.Users-Sammlung hinzufügen.
Ich versuche, dies die richtige, Publish - Subscribe Weg zu tun. Die Verwendung von Meteor.methods wurde zitiert, um für Echtzeitanwendungen nicht gut zu sein. Wie auch immer, ich möchte verstehen, wie Sie die Benutzersammlung mit Publish - Subscribe aktualisieren können.
//On the server, I did
Meteor.publish("userData", function() {
return Meteor.users.find({_id: this.userId},
{fields:{services: 1, currentHotel: 1}});
});
So sollte das currentHotel-Feld für die Client-Seite zugänglich sein. Nun ist das „currentHotel“ Feld zu aktualisieren:
//On the client I do
Meteor.subscribe('userData');
var user = Meteor.users.findOne({"_id": Meteor.userId()});
Meteor.users.update({_id: user._id}, {$set:{currentHotel:'something'}});
//I tried this too
//Meteor.users.update({ _id: Meteor.userId() }, {$set: });
auf der Browser-Konsole kann ich „currentHotel“ und „Dienstleistungen“ ganz gut, sehen, was bedeutet, die Publish-Subscribe gearbeitet. Trotzdem kann ich das aktuelle Hotel nicht aktualisieren. Ich bekomme einen Zugriff verweigert. Warum ist das?
Darüber hinaus, wenn die "currentHotel" -Eigenschaft überhaupt nicht in der Sammlung vorhanden ist, wie kann ich es mit einem ähnlichen Publish-Subscribe hinzufügen? Kann ich eine Eigenschaft veröffentlichen, die nicht dort ist, und dem Client erlauben, diese Eigenschaft zu abonnieren und hinzuzufügen?
Ich bezog mich auf die Meteor-Dokumente, this, this und this, aber kann immer noch nicht scheinen, um es zu arbeiten! :-(
Vielen Dank im Voraus
Du bist der Beste! Vielen Dank! Ich nehme an, dass ich nichts veröffentlichen muss, um dieses Profilobjekt hinzuzufügen? Edit: Ah, Profil wird automatisch veröffentlicht! Danke eine Tonne! –
Gern geschehen;) –
Danke, das war mir auch nützlich. Nur eine Anmerkung, ich habe einen Fehler bekommen, indem ich versucht habe, diesen Weg zu aktualisieren, und ich musste die _id mit '{_id: Meteor.userId()}' wie vorgeschlagen [in dieser anderen Frage] angeben (http://stackoverflow.com/ a/23705715/3961519). – Diego