Meteor和MongoDB:如何在表中设置对象

时间:2016-04-21 09:50:15

标签: meteor minimongo

我遇到了Meteor和MongoDB的问题。我正在编写一个小游戏。我使用accounts-ui并在创建帐户时向此帐户添加一些字段:

Accounts.onCreateUser(function(options, user) {
    user.money = 0;
    user.rate = 0;
    user.employees = [];
    return user;
})

如您所见,我有一张名为“雇员”的表。

当用户点击按钮雇用员工时,我想更新此表。想象一下,用户聘请程序员,我想像这样更新我的表:

Accounts.onCreateUser(function(options, user) {
    user.money = 0;
    user.rate = 0;
    user.employees = [{"programmer": 1}];
    return user;
})

如果用户雇用其他程序员,我想增加程序员的数量。如果用户雇用一名设计师,我想将其添加到表中,如下所示:

Accounts.onCreateUser(function(options, user) {
    user.money = 0;
    user.rate = 0;
    user.employees = [{"programmer": 2}, {"designer": 1}];
    return user;
})

我是Meteor和MongoDB的初学者,我不明白我是怎么做到的。

3 个答案:

答案 0 :(得分:0)

如果您的employees是您所描述的键值对,我会使用对象而不是数组。

user.employees = {};

它使MongoDB操作更容易:

Meteor.users.update({_id: someId}, {$inc: {"employees.programmer": 1}});

此服务器端代码向用户的程序员添加一个。如果用户还没有程序员,则此代码将创建第一个。

答案 1 :(得分:0)

您可以向用户添加employees属性,如下所示:

Accounts.createUser( {
   username: 'test',
   email: 'email@email.com',
   password: 'test',
   employees: {} 
});

并更新employees

  • 添加员工 Meteor.users.update(idUser, {$addToSet: {employees: {'a': 1}}}); Meteor.users.update(idUser, {$addToSet: {employees: {'b': 1}}});

  • 增加员工a的数量: Meteor.users.update(idUser, {$pull: {employees: {'a': 1}}}); Meteor.users.update(idUser, {$addToSet: {employees: {'a': 2}}});

答案 2 :(得分:0)

你可以简单地写下这样的查询:

If( programmer hired ) {
   Meteor.users.update({_id: someId}, {$inc: {"employees.programmer": 1}});
} else if ( designer hired ) {
   Meteor.users.update({_id: someId}, {$inc: {"employees.designer": 1}});
} else if ( programmer and designer hired ) {
  Meteor.users.update({_id: someId}, {$inc: {"employees.programmer": 1, "employees.designer": 1}});
}