2016-04-21 34 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

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