【发布时间】:2014-05-09 02:25:17
【问题描述】:
为什么这次更新失败了?这是基本的,我已经做过很多次了。
Meteor.users.update(id, {$set: {lastname: "Archer"}});
上面的查询甚至比原来的查询更简单了,但它仍然有同样的问题。最初我是以编程方式编译更新:
console.log(obj);
console.log(id);
if (obj) collection.update(id, obj);
这是我从这些行中得到的确切输出:
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
id 是正确的,如果obj 有问题,那对我来说就是新闻!
现在,我很肯定这与我的 allow 函数无关。在我的程序这部分的第一次测试中,我确实确实得到了update not allowed(或其他任何东西)错误,但我修改了我的allow函数以考虑到这一点,并且错误消失了。
这是我的allow 函数。我有一个用户系统,其中用户可以拥有一个“镜像”其名称信息的学生对象,因此增加了复杂性。该部分功能仅在特定情况下使用,不会改变津贴的行为。
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;
}
});
【问题讨论】:
-
这是在客户端还是服务器上?如果在客户端:是否在服务器上设置了适当的
allows?另外,您是否确认id确实是一个有效的ID? -
在客户端。是的,我已经打印出
id并且它是正确的 -
你试过用 {_id: id} 代替 id 吗?像这样:
Meteor.users.update({_id: id}, {$set: {lastname: "Archer"}}); -
@stubailo 在 Meteor 中是一样的。
-
“默认情况下,允许用户使用 Accounts.createUser 指定自己的个人资料字段并使用 Meteor.users.update 对其进行修改。要允许用户编辑其他字段,请使用 Meteor.users.allow。” .你这样做了吗?
id是当前用户的userId吗?