【问题标题】:Firebase: How to force database to store values in the order they are entered?Firebase:如何强制数据库按输入顺序存储值?
【发布时间】:2016-08-02 13:37:14
【问题描述】:

目前,Firebase 不会按照输入的顺序存储数据。对于前 - 可能有 2 个现有的孩子并插入一个新的孩子,这个新的孩子去并坐在已经存在的孩子的中间!我想这是按字母顺序工作的,但我只想以正确的顺序存储数据。

firebase.database().ref('someChildRef').set({
    //Could insert anywhere
});

我认为 push 可以以正确的顺序插入它,但 push 也会生成一个我不想要的唯一键,我只想使用 set 并以正确的顺序插入数据。

【问题讨论】:

  • 不可能。使用查询规则按您想要的顺序返回数据。
  • @theblindprophet 谢谢,orderByChild() 帮了我的忙。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

无法将数据插入 Firebase 到所需位置。 Firebase 数据按字母顺序排序,所有新插入的数据都会相应地重新排列。

使用query 规则以您想要的顺序返回数据。

如:

  • orderByChild()
  • orderByKey()
  • orderByValue()
  • equalTo()

push() 是正确的,它总是会创建一个唯一的键并添加到末尾,就像推送到数组会添加到末尾一样。

【讨论】:

    【解决方案2】:

    听起来您正在寻找 Firebase 的 push() 方法,该方法会根据时间戳生成唯一键:

    firebase.database().ref('someChildRef').set({
        //Will result at "the end"
    });
    

    【讨论】:

      【解决方案3】:
      var messageListRef = new Firebase('https://samplechat.firebaseio-demo.com/message_list');
      var newMessageRef = messageListRef.push();
      newMessageRef.set({ 'user_id': 'fred', 'text': 'Yabba Dabba Doo!' });
      // We've appended a new message to the message_list location.
      var path = newMessageRef.toString();
      

      尝试使用push() 方法而不是set。根据他们的文档:

      push() 生成的唯一名称以客户端生成的时间戳为前缀,以便生成的列表按时间顺序排序。

      参考:https://www.firebase.com/docs/web/api/firebase/push.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2017-07-20
        相关资源
        最近更新 更多