如何删除流星集合内数组中的某个字段?

时间:2019-01-03 00:08:12

标签: javascript reactjs mongodb meteor

我无法删除Meteor集合中数组内的字段。这是我收藏的结构:

collection structure

我已经尝试过了:

_source

但未成功。

我想删除“所有者”数组下的任何键,并且我仅引用其值,而不引用其索引。在这种情况下,我将SMUProfiles.update({ owner: this.userId, 'classrooms.owner': classroom_id, }, { $pull: { 'classroom.$.owner': classroom_id } } ) 称为6Yi64LqpqnfsHv4ms

2 个答案:

答案 0 :(得分:1)

您尝试过

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

我认为带有对象路径的简单pull运算符应该足以从数组中提取元素。

答案 1 :(得分:0)

显然,目前没有简便的方法可以做到这一点。因此,对于可能正在研究类似问题的其他人来说,这是我的解决方案:

//** 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个收藏集ClassroomsSMUProfiles。注册后,将在SMUProfile下为该用户创建一条新记录,其中包含其他一些详细信息(请参阅上面问题中的图片),包括该用户创建的教室ID的记录。

现在,当用户删除Classrooms集合中的教室时,我还需要删除SMUProfile中已删除的教室的ID。我最初试图从SMUProfile中的ID数组中删除ID,但未成功。

我通过以下方法解决了此问题:删除教室后,重新读取Classrooms集合,在数组中重复重申其余教室的ID,然后$set将新的教室ID数组SMUProfile