2016-04-21 36 views
0

我有一个流星和MongoDB的问题。我正在编写一个小游戏。我使用的帐户的用户界面,并创建一个帐户,当我加入一些字段此帐户:流星和MongoDB:如何设置表中的对象

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

我在流星和MongoDB初学者,我不明白我怎么能做到这一点。

回答

0

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

user.employees = {};

这使得MongoDB的操作更加方便:

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

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

0

您可以在employees属性添加到用户是这样的:

Accounts.createUser({ 
    username: 'test', 
    email: '[email protected]', 
    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}}});

+0

非常感谢您! – DeepSiderZ

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

谢谢您的回答,我将使用aedm的解决方案,因为我会有很多类型的员工,所以如果我使用if/else将难以维护代码:) – DeepSiderZ

+0

嗨,不客气。是的,阿德姆也给出了很好的答案。 –