我有一个模板事件,允许用户将内容插入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}});
}
任何人都对可能发生的事情有任何线索?
答案 0 :(得分:0)
您似乎没有定义在这些方法中传递的user_id
变量(incrementStatistic
和decrementStatistic
)。
相反,正如您在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。