使用文档ID在客户端上更新Mongo,但限制使用其他字段进行搜索

时间:2015-01-15 09:42:45

标签: meteor

更新包含对象数组的文档时,我有这个功能:

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更新文档,而是搜索该数组位置以使用。$表示法。

如何在不使用方法的情况下实现这一点,这看起来有点笨拙......?

1 个答案:

答案 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

获取当前userId

现在从您的点击处理程序调用此计量器方法

Meteor.call('update_players')

希望这有帮助