数据库更新在Meteor方法中不起作用

时间:2015-11-04 17:46:46

标签: meteor

我有一个模板事件,允许用户将内容插入Meteor数据库的集合中。

var challenge_info = {
        "creator_id": Meteor.userId(),
        "creator_firstname": creat_firstname,
        "creator_avatarurl": Session.get('chUser').avatar_url,
        "recepient_id": recepient_id,
        "recepient_firstname": recepient_firstname,
        "recepient_avatarurl": recepient_avatarurl,
        ...
        "state": 0
    };

    Meteor.call('insertChallenge', challenge_info);

    Meteor.call('incrementStatistic', Meteor.userId(),'c_sent');
    Meteor.call('incrementStatistic', recepient_id,'c_pending');

    Session.set('new_challenge_reset', true);

    Router.go('home');

调用方法' insertChallenge'时,一切正常,只需调用ChallengesList.insert(challenge_info)。

但是当试图调用“增量统计”时#39;方法,没有任何反应。终端没有给我任何错误,我无法在浏览器控制台上测试查询(从客户端更新数据库,而Meteor中的选择不再是ID,我已经删除了自动发布)

以下是方法(在Meteor.methods()中):

incrementStatistic : function(user_id, stat){
    UserStatistics.update({"user_id": user_id}, {"$inc" : {stat: 1}});
},
decrementStatistic : function(user_id, stat){
    UserStatistics.update({"user_id": user_id}, {"$inc" : {stat: 1}});
},
createStatistics : function(){
    UserStatistics.insert({'user_id': Meteor.userId(), 'c_won': 0, 'c_lost': 0, 'c_accepted': 0 , 'c_rejected': 0, 'c_pending': 0, 'c_sent': 0});
    return true;
}

我能够使用UserStatistics.findOne({"user_id": Meteor.userId()});检索集合信息(在另一个模板中),但增量永远不会有效。

虽然它可能与此问题没有关系,但我也有一个使用Collection.update()的服务器方法可以正常工作(尽管它使用_id作为选择器):

updateChallengeState: function(challenge_id, new_challenge_state){
    ChallengesList.update({_id: challenge_id}, {"$set" : {"state": new_challenge_state}});
}

任何人都对可能发生的事情有任何线索?

1 个答案:

答案 0 :(得分:0)

您似乎没有定义在这些方法中传递的user_id变量(incrementStatisticdecrementStatistic)。

相反,正如您在createStatistics方法中所做的那样,只需通过Meteor.userId(),我相信您也不需要发送stat

incrementStatistic : function(){
    UserStatistics.update({user_id: Meteor.userId()}, {$inc : {stat: 1}});
},
decrementStatistic : function(){
    UserStatistics.update({user_id: Meteor.userId()}, {$inc : {stat: 1}});
},

并且不使用任何参数调用方法:

Meteor.call('incrementStatistic');

顺便提一下,我建议您采用一种使用mongodb语法的方法。有时您似乎使用撇号(' user_id'),有时会引用(" user_id"),有时也不使用(user_id)。对于字段名称,可以选择使用它们,但对于运算符($ inc,$ set,$和,$等),不使用引号或撇号的标准。请参阅the documentation