如何更新Meteor.user()。配置文件属性的内容?

时间:2016-12-08 00:49:57

标签: meteor meteor-accounts

我有一个按钮,如果按下该按钮,它应该减少用户内部的属性,

我希望在按下时减少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')}});

我最后一部分做错了什么?

1 个答案:

答案 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进行搜索,则只需将该值作为第一个参数而不是对象传递。