Как удалить определенное поле в массиве внутри коллекции Meteor? - PullRequest
0 голосов
/ 03 января 2019

Я не могу удалить поле внутри массива в коллекции Метеор.Вот структура моей коллекции:

collection structure

Я пробовал это:

SMUProfiles.update({
  owner: this.userId,
      'classrooms.owner': classroom_id,
    }, {
      $pull: {
          'classroom.$.owner': classroom_id 
      }
    }
 )

, но безуспешно.

Я хочу удалитьлюбой ключ в массиве «владелец», и у меня есть только ссылка на его значение, а не их индекс.В этом случае у меня есть ссылка на 6Yi64LqpqnfsHv4ms как classroom_id.

Ответы [ 2 ]

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

Вы пробовали

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

Я думаю, что простого оператора вытягивания с путем к объекту должно быть достаточно для извлечения элементов из массива.

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

Очевидно, в настоящее время нет простого способа сделать это.Итак, в интересах тех, кто может искать подобную проблему, вот мое решение:

//** 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
        }
      }
    )
  },

История этого решения: у меня есть 2 коллекции Classrooms и SMUProfiles.После регистрации в SMUProfile для этого пользователя будет создана новая запись, содержащая несколько других деталей (см. Рисунок, прикрепленный в вопросе выше), включая запись идентификаторов классов, созданных пользователем.

Сейчас, когда пользователь удаляет класс в коллекции Classrooms, мне нужно также удалить идентификатор класса, который был удален, в SMUProfile.Первоначально я пытался удалить идентификатор из массива идентификаторов в SMUProfile, но безуспешно.

Я решил эту проблему, перечитав коллекцию Classrooms после удаления класса, повторив идентификаторы оставшихся классов внутри массива, и $set этого нового массива идентификаторов классов SMUProfile.

...