8

Ho provato a cercare una risposta dappertutto ma non riesco a farlo funzionare. Sto usando Meteor con Cordova per costruire un'app mobile.Meteor: Come dovrei aggiornare la collezione Users per includere un nuovo attributo nell'oggetto/dizionario?

Desidero aggiungere un attributo alla mia raccolta di utenti (quello che Meteor crea quando ho effettuato l'accesso). vale a dire. Ad esempio, desidero aggiungere {currentHotel: "Something"} alla mia raccolta db.Users.

Sto tentando di fare ciò nel modo corretto, Iscriviti - Iscriviti. L'uso di Meteor.methods è stato citato per non essere buono per le applicazioni in tempo reale. Ad ogni modo, voglio capire come aggiornare la collezione di utenti usando Publish - Subscribe.

//On the server, I did 
Meteor.publish("userData", function() { 
    return Meteor.users.find({_id: this.userId}, 
     {fields:{services: 1, currentHotel: 1}}); 
}); 

Quindi il campo correnteHotel dovrebbe essere accessibile al lato client. Ora per aggiornare il campo "currentHotel":

//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: }); 

Sulla console del browser posso vedere "currentHotel" e "servizi" bene, che significa che il publish-subscribe funzionato. Eppure non riesco ad aggiornare l'attuale Hotel. Ricevo un accesso negato. Perchè è questo?

Inoltre, se la proprietà "currentHotel" non esisteva affatto nella raccolta, come posso aggiungerla utilizzando un annuncio-sottoscrizione simile? Posso pubblicare una proprietà che non è presente e consentire al cliente di iscriversi e aggiungere quella proprietà?

Ho fatto riferimento ai documenti Meteor, this, this e this, ma non riesco ancora a farlo funzionare! :-(

Grazie in anticipo

risposta

7

Non dovresti cambiare i campi radice dell'oggetto Utente:

Meteor.users.update(user, {$set: {"profile.currentHotel": "something"}}); 

Read more here: http://docs.meteor.com/#/full/meteor_users

EDIT: Questa risposta è diventato irrilevante come mostrato nella documentazione più recente: https://guide.meteor.com/accounts.html#dont-use-profile

Questa risposta ha più di 1 anno :) Come si scopre, forci ng per scrivere campi specifici dell'utente sotto un campo 'profile' come alcune gravi implicazioni sulla sicurezza (come ho sempre pensato) dato che dà il permesso ai client di modificare quei sotto-campi. Quindi sì, puoi impostare i campi nell'oggetto root, ma tieni presente che i campi che non devono essere modificati dal client, dovrebbero essere sotto un campo senza permessi di scrittura (altrimenti cade sotto lo stesso problema).

+0

Sei il migliore! Grazie! Presumo che non sia necessario pubblicare nulla da aggiungere a questo oggetto profilo? Modifica: Ah, il profilo è pubblicato automaticamente! Grazie mille! –

+0

Prego;) –

+0

Grazie, anche a me è stato utile. Solo una nota, ho ricevuto un errore cercando di aggiornare in questo modo e ho dovuto indicare _id con '{_id: Meteor.userId()}' come suggerito [in questa altra domanda] (http://stackoverflow.com/ un/23705715/3,961519 millions). – Diego

Problemi correlati