Próbowałem szukać odpowiedzi na wszystkie strony, ale nie wydaje się, aby to działało. Używam Meteora z Cordova, aby zbudować aplikację mobilną.Meteor: W jaki sposób zaktualizować kolekcję Użytkownicy, aby dodać nowy atrybut do obiektu/słownika?
Chcę dodać atrybut do mojej kolekcji Użytkownicy (ten, który Meteor tworzy po zalogowaniu). to znaczy. Na przykład chcę dodać {currentHotel: "Something"} do mojej kolekcji db.Users.
Próbuję zrobić to w prawidłowy sposób, Opublikuj - Subskrybuj. Używanie Meteor.methods zostało zacytowane, aby nie było dobre dla aplikacji działających w czasie rzeczywistym. Tak czy inaczej, chcę zrozumieć, jak zaktualizować kolekcję Użytkownicy za pomocą Opublikuj - Subskrybuj.
//On the server, I did
Meteor.publish("userData", function() {
return Meteor.users.find({_id: this.userId},
{fields:{services: 1, currentHotel: 1}});
});
Tak więc pole currentHotel powinno być dostępne po stronie klienta. Teraz, aby zaktualizować „currentHotel” murawę:
//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: });
Na konsoli przeglądarki widzę „currentHotel” i „usługi” dobrze, co oznacza, publikowania-subskrybowania pracował. Jednak nie mogę zaktualizować currentHotel. Otrzymuję odmowę dostępu. Dlaczego to?
Dodatkowo, jeśli właściwość "currentHotel" w ogóle nie istniała w kolekcji, w jaki sposób mogę ją dodać za pomocą podobnej subskrypcji do publikacji? Czy mogę opublikować właściwość, której nie ma i zezwolić klientowi na subskrypcję i dodanie tej właściwości?
Odwołałem się do dokumentów Meteor, this, this i this, ale nadal nie mogę sprawić, żeby działało! :-(
góry dzięki
Jesteś najlepszy! Dziękuję Ci! Zakładam, że nie muszę publikować niczego, co można dodać do tego obiektu profilu? Edycja: Ah, profil jest publikowany automatycznie! Dzięki za tonę! –
Nie ma za co;) –
Dzięki, to też mi się przydało. Tylko jedna uwaga, dostałem błąd, próbując zaktualizować ten sposób i musiałem wskazać, że _id z '{_id: Meteor.userId()}' jak zasugerowano [w tym innym pytaniu] (http://stackoverflow.com/ a/23705715/3961519). – Diego