我有一个按钮,如果按下该按钮,它应该减少用户内部的属性,
我希望在按下时减少annualLeave
属性。
"profile" : {
"annualLeave" : 14,
"replancementLeave" : 0,
"medicalLeave" : 7
}
}
以下是获取userID
的代码:
Session.set('getUserId', Al.findOne({_id: Session.get('appealId')}));
console.log(Session.get('getUserId').userID);
appealId
会话拥有当前项目的_Id
。在项目内,项目所属的用户的_Id
存储在userID
中。
获得userID
后,我用它来检索annualLeave
。这是代码:
Session.set('userDetails', Meteor.users.findOne({_id: Session.get('getUserId').userID}));
console.log(Session.get('userDetails').profile.annualLeave);
直到现在,console.log
都成功打印出值。
现在到最后一步,我想将annualLeave
减少1,然后更新数据库中的用户信息,
这是我的代码(不起作用):
Session.set('counter', Session.get('userDetails').profile.annualLeave - 1);
Meteor.users.findOne({_id : Session.get('getUserId').userID},{$set:{profile.annualLeave: Session.get('counter')}});
我最后一部分做错了什么?
答案 0 :(得分:1)
如果密钥不在根级别而,您需要使用引号,而不需要使用.update()
方法代替.findOne()
Meteor.users.update(Session.get('getUserId').userID,
{ $set: { "profile.annualLeave": Session.get('counter') }});
您也可以通过减少值来跳过部分Session
的使用:
Meteor.users.update(Session.get('getUserId').userID,
{ $inc: { "profile.annualLeave": -1 }});
请注意,如果您仅按_id
进行搜索,则只需将该值作为第一个参数而不是对象传递。