meteor array $ addToSet不添加任何项目

时间:2016-07-08 23:01:34

标签: mongodb meteor

我尝试使用$ 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);
      });
}

谢谢!

2 个答案:

答案 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中的错误。