如何更新 Meteor.user().profile 属性的内容?

How to update the content of Meteor.user().profile attributes?

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

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

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

如果密钥不在根级别,您需要将其放在引号中 并且您需要使用 .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 进行搜索,则可以将值作为第一个参数而不是对象传递。