【问题标题】:Meteor and MongoDB: How to set an object in a tableMeteor 和 MongoDB:如何在表中设置对象
【发布时间】:2016-08-14 10:28:33
【问题描述】:

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

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

如您所见,我有一个名为“employees”的表。

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

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 的初学者,我不明白如何做到这一点。

【问题讨论】:

    标签: meteor minimongo


    【解决方案1】:

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

    user.employees = {};

    它使 MongoDB 操作更容易:

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

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

    【讨论】:

      【解决方案2】:

      您可以像这样向用户添加employeesattribute:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 感谢您的回答,我将使用 aedm 的解决方案,因为我会有很多员工,所以如果我使用 if/else 将很难维护代码:)跨度>
        猜你喜欢
        • 1970-01-01
        • 2019-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多