【问题标题】:How to delete a certain field in an array inside Meteor collection?如何删除 Meteor 集合中数组中的某个字段?
【发布时间】:2019-05-29 14:24:12
【问题描述】:

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

我试过这个:

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

但不成功。

我想删除 'owner' 数组下的任何键,我只引用它的值,而不是它们的索引。在这种情况下,我将6Yi64LqpqnfsHv4ms 引用为classroom_id

【问题讨论】:

    标签: javascript reactjs mongodb meteor


    【解决方案1】:

    显然,目前没有简单的方法可以做到这一点。因此,为了其他可能正在研究类似问题的人的利益,这是我的解决方案:

    //** 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 来解决此问题。

    【讨论】:

      【解决方案2】:

      你试过了吗

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2021-09-11
        • 2013-12-11
        • 2014-09-16
        • 2013-03-23
        相关资源
        最近更新 更多