我尝试使用$ addToSet在meteor中为个人档案集合添加乐器。代码在mongo中工作,但在meteor方法调用中不起作用。我能够使用$ set更新所有其他字段而没有任何问题,所以我知道这是找到正确的用户。
updateInstruments(instruments) {
if (!this.userId) {
throw new Meteor.Error('not-logged-in',
'Must be logged in to update last name.');
}
check(instruments, String);
if (instruments.length === 0) {
throw Meteor.Error('instruments-required', 'Must provide at least one instrument.');
}
let instrArray = instruments.split(',');
instrArray.forEach(function(instrument){
instrument = instrument.trim();
Profiles.update({ userId: this.userId }, { $addToSet: { instruments: instrument } });
});
},
我甚至尝试过:
Profiles.update({ userId: this.userId }, { $addToSet: { instruments: {$each: [instrument] } }});
以及:
Profiles.update({ userId: this.userId }, { $addToSet: { instruments: [instrument] }});
我也试过$ push,也没有发生任何事情。流星内是否存在某种错误?我需要配置一些其他设置以允许更新数组吗?
更新: 根据请求,这里是客户端代码:
updateInstruments() {
if (_.isEmpty(this.data.instruments)) return;
var self = this;
let instruments = this.data.instruments;
this.callMethod('updateInstruments', instruments, (err) => {
if (err) return this.handleError(err);
});
}
谢谢!
答案 0 :(得分:1)
我想出了这个问题。我忘记了这个'的范围。 inline' instrArray.forEach'功能,使this.userId' undefined'。 “个人档案”集合无法找到该记录。我更改了以下代码:
let instrArray = instruments.split(',');
instrArray.forEach(function(instrument){
instrument = instrument.trim();
Profiles.update({ userId: this.userId }, { $addToSet: { instruments: instrument } });
});
到:
let userId = this.userId;
let instrArray = instruments.split(',');
instrArray.forEach(function(instrument){
instrument = instrument.trim();
Profiles.update({ userId: userId }, { $addToSet: { instruments: instrument } });
});
感谢大家查看我的代码!
答案 1 :(得分:0)
您的查询对我来说似乎很好。只要您在服务器上执行此操作,就不需要配置任何内容。不是Meteor中的错误。