Pourquoi cette mise à jour échoue-t-elle? C'est basique, je l'ai fait beaucoup d'autres fois. Cette requête ci-dessus a même été simplifiée par rapport à ce qu'elle était à l'origine, et elle a toujours le même problème. Au départ, je compilait la mise à jour programatically:Mise à jour de Meteor Mongo Requête invalide
console.log(obj);
console.log(id);
if (obj) collection.update(id, obj);
Voici ma sortie exacte de ces lignes:
Object {$set: Object}
$set: Object
lastname: "Archer"
__proto__: Object
__proto__: Object
main.js?b9104f881abb80f93da518738bf1bfb4cab0b2b6:68
YXeudfnHyKmsGXaEL
main.js?b9104f881abb80f93da518738bf1bfb4cab0b2b6:69
update failed: MongoError: invalid query
debug.js:41
Le id
est correct, et si le obj
a quelque chose de mal avec elle, ce sera nouvelles à moi!
Maintenant, je suis assez positif que cela n'a rien à voir avec ma fonction allow
. Dans les premiers tests de cette partie de mon programme, j'ai effectivement obtenu l'erreur update not allowed
(ou quoi que ce soit), mais j'ai modifié ma fonction allow
pour prendre cela en compte, et cette erreur est partie.
Voici ma fonction allow
. J'ai un système d'utilisateur où un utilisateur peut avoir un objet étudiant qui «reflète» son information de nom, d'où la complexité ajoutée. Cette partie de la fonction n'est engagée que dans certaines circonstances, et elle ne modifie pas le comportement de l'allocation.
Meteor.users.allow({
update: function (userId, doc, fields, modifier) {
var allow = (userId && (doc._id === userId) && _.without(fields,
'firstname', 'lastname', 'student_ids', 'payment_ids', 'phones').length == 0) || Meteor.user().admin;
if (allow && modifier.$set && (_.contains(fields, 'firstname') || _.contains(fields, 'lastname'))) {
var user = Meteor.users.findOne(userId);
var obj = {};
if (modifier.$set.firstname) obj.firstname = modifier.$set.firstname;
if (modifier.$set.lastname) obj.lastname = modifier.$set.lastname;
if (obj) Students.update({_id: {$in: user.student_ids}, reflectsUser: true}, {$set: obj});
}
return allow;
}
});
est-ce sur le client ou le serveur? et si sur le client: le 'allow's approprié est-il placé sur le serveur? Aussi, as-tu vérifié que 'id' est bien un identifiant valide? –
C'est sur le client. Et oui, j'ai imprimé ce 'id' et c'est correct – blaineh
Avez-vous essayé d'utiliser {_id: id} au lieu de id? Comme ceci: 'Meteor.users.update ({_ id: id}, {$ set: {lastname:" Archer "}});' – stubailo