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

Meteor and MongoDB: How to set an object in a table

我对 Meteor 和 MongoDB 有疑问。我正在编写一个小游戏。我使用 accounts-ui 并在创建帐户时向该帐户添加一些字段:

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

如您所见,我有一个名为 "employees" 的 table。

当用户单击按钮以雇用员工时,我想更新此 table。假设用户雇用了一名程序员,我想像这样更新我的 table :

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

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

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

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

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

user.employees = {};

它使 MongoDB 操作更容易:

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

此服务器端代码为用户的程序员增加了一位。如果用户还没有程序员,此代码将创建第一个。

您可以像这样向用户添加 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}}});

您可以像这样简单地编写查询:

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}});
}