Как запустить `$ set` и` $ pull` в методе Meteor? - PullRequest
0 голосов
/ 16 января 2019

Я хочу обновить коллекцию с именем SMUProfiles с помощью метода с именем classroom.delete. Я хочу вытащить classroom_id из 2 мест внутри SMUProfiles, то есть одно внутри classrooms.owner, которое имеет массив кодов, а другое внутри массива classrooms.students.

Я успешно обработал одну часть $ set, и теперь пытаюсь добавить $ pull, но $pull, похоже, не работает.

Можем ли мы сделать $set и $pull таким образом?

/* Method for deleting Classroom */
'classroom.delete'(classroom_id) {
  if (!this.userId) {
    throw new Meteor.Error('not-authorised');
  }
  Classrooms.remove(classroom_id)
  let classids = Classrooms.find({ owner: this.userId }).fetch().map(function(classrooms){
    return classrooms._id })
  //console.log(classids);
  SMUProfiles.update({
      owner: this.userId,
    }, {
      $set: {
        'classrooms.owner': classids
      },
      $pull: {
        'classrooms.students': classroom_id
      }
    }
  )
}

1 Ответ

0 голосов
/ 17 января 2019

Вы пытаетесь $set и $pull на одном и том же поле в одном и том же обновлении - конфликт двух операций;поэтому нет, вы не можете использовать эти операторы таким образом.

Вы можете легко разделить это на два:

SMUProfiles.update(
  { owner: this.userId },
  { $set: { 'classrooms.owner': classids },
);
SMUProfiles.update(
  { owner: this.userId },
  { $pull: { 'classrooms.students': classroom_id },
);

См., например, этот ответ

...