Angularfire2删除匹配UserId的所有项目

时间:2017-06-08 19:19:48

标签: angular firebase ionic-framework angularfire

我在离子应用程序中使用angularfire2。我试图从firebase节点中删除所有与用户ID匹配的条目。我有一个忠诚点节点,当我运行我的重置功能时,我想删除与该用户相关的忠诚点节点中的所有条目。

Image of firebase list showing all entries with matching userId

我设法将所有条目都放入一个名为“myPoints'将其添加到我的构造函数中:

this.angularfire.auth.subscribe(res => {
   if (res != null) {
     let userID = res.auth.uid;
     this.af.list('/loyaltypoints', {
        query: {
           orderByChild: 'userId',
           equalTo: userID,
        }
     }).subscribe(response => {
        this.myPoints = response;
     })
   }
})

我不知道如何在this.myPoints变量上运行remove()函数来删除所有这些条目。

谢谢

<小时/> UPDATE

所以这似乎对我有用,首先导入就像这样: import&#39; rxjs / add / operator / take&#39;;

然后此代码删除所有相关的firebase条目:

this.angularfire.auth.subscribe(res => {
        if (res != null) {
            let userID = res.auth.uid;
            this.af.list('/loyaltypoints', {
                preserveSnapshot: true,
                query: {
                    orderByChild: 'userId',
                    equalTo: userID,
                }
            }).take(1).subscribe(response => {
                console.log(response)
                response.forEach((snapshot) => {
                    this.af.object('/loyaltypoints/' + snapshot.key).remove();
                })

            })
        }
    })

1 个答案:

答案 0 :(得分:3)

所以你缺少的是获得与每个忠诚点条目相对应的密钥。

this.angularfire.auth.subscribe(res => {
if (res != null) {
 let userID = res.auth.uid;
 this.af.list('/loyaltypoints', {
    preserveSnapshot: true,
    query: {
       orderByChild: 'userId',
       equalTo: userID,
    }
 }).take(1).subscribe(snaphots=> {
    snapshots.forEach((snapshot) => {
        this.af.object('/loyaltypoints/' + snapshot.key).remove();
    }) 

 })
}
})

如果您注意到我添加了一个take(1),因为如果您正在更改您订阅的节点,它会再次触发数据提取。你可能需要稍微玩一下以确保它是正确的。