如何删除Firebase中列表中推送的数据?

时间:2015-03-31 22:56:35

标签: firebase

鉴于

var messageListRef = new Firebase('https://SampleChat.firebaseIO-demo.com/message_list');
    messageListRef.push({ 'user_id': 'fred', 'text': 'Yabba Dabba Doo!' });

如何从Firebase中删除添加的数据{ 'user_id': 'fred', 'text': 'Yabba Dabba Doo!' }?有没有干净简单的方法呢?

我希望以后能够再次找到该数据,然后将其删除,假设我不知道生成的唯一ID,我无法new Firebase('https://SampleChat.firebaseIO-demo.com/message_list/'+uniqueId).remove()(我不会&# 39;不知道这是不是很好的做法。在我的想法中,我首先会查询数据,但我不知道如何使用数据列表来执行此操作。例如,我希望能够在Disconnect上删除该数据。

在该页https://www.firebase.com/docs/web/api/firebase/push.html上,似乎是"查看数据列表"还没写。是否在路线图中为数据列表添加此类删除?

2 个答案:

答案 0 :(得分:3)

当您致电push时,它会返回新节点。因此,您可以保留用户在内存中添加的消息列表:

var myMessageKeys = []; // put this somewhere "globally"

然后每当您添加消息时:

var newMessageRef = messageListRef.push({ 'user_id': 'fred', 'text': 'Yabba Dabba Doo!' });
myMessageKeys.push(newMessageRef.key());

就个人而言,这对我来说很难受。我更愿意使用查询,例如,如果fred断开连接,你可以执行以下操作:

var myMessages = messageListRef.orderByChild('user_id').equalTo('fred');
myMessages.on('value', function(messagesSnapshot) {
    messagesSnapshot.forEach(function(messageSnapshot) {
        messageSnapshot.ref().remove();
    });
});

答案 1 :(得分:1)

因此找出要删除的消息就是诀窍。但是假设您要按用户ID删除;也许当Fred断开连接时,您想要删除他的所有消息。您可以像这样找到并删除它们:

var query = messageListRef.orderByChild('user_id').equalTo('Fred');

query.once('child_added', function(snapshot) {
    snapshot.forEach( function(msg) {
        msg.ref().remove();
    });
});