Firebase:推送引用是否重要

时间:2018-04-06 22:34:35

标签: android firebase firebase-realtime-database

如果我想在名为(messages)的实时数据库中推送数据库节点:

它有这样的结构:

<Helmet
        title="ABC"
        meta={[
            { name: "ABC", content: "ABC" }
        ]}
        links={
        rel='icon',
        type='image/png',
        sizes='16x16',
        href={require('favicon.ico')}
        }

/>

现在,如果我想推送消息/ current_id / user_id

然后重要

如果我这样做:

     messages
     |
     current_id
     |
     user_id
     |
     push_id1
     |
     push_id2

或者这个:

     my_ref= FirebaseDatabase.getInstance().getReference().child("messages").child(current_id).child(user_id).push();

如果是的话。那它有什么不同?

修改

所以我将根据franks建议解释我如何使用我的代码

所以我从第一个片段坦克建议得到推送ID:

    my_ref= FirebaseDatabase.getInstance().getReference().push();

然后我这样做了多个更新2个位置

第一个位置:messages / current_id / user_id

第二个位置:messages / user_id / current_id

    String push_id= my_ref.getkey();

我注意到在位置2处,推送ID未正常排序(未按顺序排序)。

但是在位置1,他们正常排序。

不要问我为什么要拆分多路径更新.....出于安全规则的原因。

1 个答案:

答案 0 :(得分:1)

在任何ADComputer上拨打ref.push()基本上可以做两件事:

  1. 根据客户的当前时间戳和大量随机性创建一个统计上保证唯一的新ID,以使其唯一。

  2. 创建一个新的DatabaseReference指向DatabaseReference

  3. ref.child(newId)

    my_ref= FirebaseDatabase.getInstance().getReference().child("messages").child(current_id).child(user_id).push(); 下创建对新位置的引用。

    此:

    /messages/$current_id/$user_id

    创建对根目录下新位置的引用。

    由于您需要my_ref= FirebaseDatabase.getInstance().getReference().push(); 下的新子项,因此您需要第一个代码段。

    请注意,两个片段实际上都没有写入任何数据,这需要您拨打/messages/$current_id/$user_idsetValue(...)