更新包含对象数组的文档时,我有这个功能:
Template.editCompetition.events = {
'click button.promote': function() {
Competitions.update({_id: Session.get('competition_id'), 'players.user_id': this.user_id}, {$set: {'players.$.supervisor': true}});
},
};
我看到了错误:
Uncaught Error: Not permitted. Untrusted code may only update documents by ID.
我的文档如下:
{
_id: 'aaaabbbbb',
title: 'ccccdddddd',
players: [
{
username: 'wwwww',
user_id: 'xxxxx',
supervisor: false
},
{
username: 'yyyyy',
user_id: 'zzzzz',
supervisor: false
}]
}
我的查询不是通过ID更新文档,而是搜索该数组位置以使用。$表示法。
如何在不使用方法的情况下实现这一点,这看起来有点笨拙......?
答案 0 :(得分:0)
您还尝试将player.user_id
用作update
查询
您必须使用其他选项Meteor.method
。
将集合更新代码移至Meteor服务器端方法并从客户端调用
在服务器端,
Meteor.methods({
`update_players`: function(competition_id){
user_id = this.userId
Competitions.update({_id: competition_id, 'players.user_id': user_id}, {$set: {'players.$.supervisor': true}});
}
})
在上面的代码中,了解我们如何使用this.userId
现在从您的点击处理程序调用此计量器方法
Meteor.call('update_players')
希望这有帮助