2017-10-17 212 views
0

我使用火力地堡如下:火力地堡重置键

Post-- 

    -Kwc6asRRI1SUqrigYeD     <- First input 
         -> Date: 1:00pm 
         -> ID: 1 
         -> Content: Hello! 
    -Kwc6fXQsN2xIQtHOofZ 
         -> Date: 2:00pm 
         -> ID: 2 
         -> Content: How are you? 
    -Kwc6fXQsN2xRO39LDPD     <-Most recent one 
         -> Date: 3:00pm 
         -> ID: 3 
         -> Content: I am good. 

这些被“推送”,从而产生一个唯一的密钥,其可用于根据"most recent to old"(或ID:3ID:1)显示它们。

现在,当我需要更新数据,让说ID:1文章内容从"Hello""My name is Steve",那么它仍然保持着,即使这是最近的一个独特的密钥。

Post-- 

    -Kwc6asRRI1SUqrigYeD     <-Most recent one 
         -> Date: 4:00pm 
         -> ID: 1 
         -> Content: My name is Steve 
    -Kwc6fXQsN2xIQtHOofZ 
         -> Date: 2:00pm 
         -> ID: 2 
         -> Content: How are you? 
    -Kwc6fXQsN2xRO39LDPD     
         -> Date: 3:00pm 
         -> ID: 3 
         -> Content: I am good. 

我想我可以删除帖子并设置一个新的帖子,但这似乎效率低下,特别是如果我有更多的数据在每个孩子。

有没有办法重新设置密钥,以便它反映时间变化(如下所示)?

Post-- 

    -Kwc6fXQsN2xIQtHOofZ 
         -> Date: 2:00pm 
         -> ID: 2 
         -> Content: How are you? 
    -Kwc6fXQsN2xRO39LDPD     
         -> Date: 3:00pm 
         -> ID: 3 
         -> Content: I am good. 

    -Kwc6asRRI1KDodkeixk    <-Most recent one 
         -> Date: 4:00pm 
         -> ID: 1 
         -> Content: My name is Steve 

回答

2

没有办法更新现有节点的关键(见123)。如果你想要一个新的密钥,你必须生成一个具有相同内容的新节点。

但在这种情况下,它似乎更可能是你要保持你的数据结构为,而是增加一个lastUpdated时间戳到每个岗位:

Post-- 
    -Kwc6asRRI1SUqrigYeD 
        -> Date: 1:00pm 
        -> lastUpdated: 1508215054096 
        -> ID: 1 
        -> Content: Hello! 
    -Kwc6fXQsN2xIQtHOofZ 
        -> Date: 2:00pm 
        -> lastUpdated: 1507610306270 
        -> ID: 2 
        -> Content: How are you? 
    -Kwc6fXQsN2xRO39LDPD 
        -> Date: 3:00pm 
        -> lastUpdated: 1508128668412 
        -> ID: 3 
        -> Content: I am good. 

有了这个结构,你可以使用一个火力地堡查询以您想要的顺序获得结果。在JavaScript中,这看起来像这样:

var ref = firebase.database().reference("Post"); 
ref.orderByChild("lastUpdated") 
    .once("value") 
    .then(function(snapshot) { 
    snapshot.forEach(function(post) { 
     console.log(snapshot.key+": "+snapshot.val().Content); 
    }); 
    }); 
+0

谢谢弗兰克!非常感激。 –