我遇到了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的初学者,我不明白我是怎么做到的。
答案 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}});
}