【问题标题】:Firebase pushing array - JavascriptFirebase 推送数组 - Javascript
【发布时间】:2017-05-30 13:43:42
【问题描述】:

我正在使用 Firebase 存储锻炼应用程序的信息。

我的用户添加了一个锻炼名称,然后我将其推送到数据库。我可以继续推动这些,但我的问题是它似乎并没有作为一个数组推动一个对象。请参阅下面的屏幕截图...

正如您在控制台日志图片中看到的,锻炼属性是一个对象,而不是我期望的数组。

我用来推送的代码:

    let newWorkout = {
      title: 'title',
      exercises: [{
        name: 'pulldownsnsn',
        sets: 4
      }]}

    let ref = firebase.database().ref("/userProfile/"+this.userId);

    ref.child("workouts").push(newWorkout);

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    Firebase 数据库以不同格式存储数据列表,以满足现代网络的多用户和离线方面的需求。 -K... 称为推送 ID,是您在数据库引用上调用 push() 时的预期行为。

    请参阅 blog post on how Firebase handles arrays、有关这些键格式的博客文章以及 Firebase documentation on adding data to lists

    【讨论】:

      【解决方案2】:

      数组很方便,但它们是分布式数据库的噩梦,原因很简单:当元素被推送或删除时,索引元素识别不可靠。 Firebase 数据库改为使用键来识别元素:

      // javascript object
      ['hello', 'world']
      
      // database object
      { -PKQdFz22Yu: 'hello', -VxzzHd1Umr: 'world' }
      

      使用push() 时会变得很棘手,因为它的行为实际上并不像普通推送,而是作为密钥生成然后对象修改。

      示例用法

      firebase.database().ref('/uri/to/list').push(
          newElement,
          err => console.log(err ? 'error while pushing' : 'successful push')
      )
      

      【讨论】:

      • 你弄明白了吗?有什么建议吗?我有同样的问题。
      【解决方案3】:

      这是 firebase 文档中的一个示例:

      const admin = require('firebase-admin');
      // ...
      const washingtonRef = db.collection('cities').doc('DC');
      
      // Atomically add a new region to the "regions" array field.
      const unionRes = await washingtonRef.update({
        regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
      });
      // Atomically remove a region from the "regions" array field.
      const removeRes = await washingtonRef.update({
        regions: admin.firestore.FieldValue.arrayRemove('east_coast')
      });
      

      更多关于this firebase documentation的信息。

      【讨论】:

      • 您的答案基于 Cloud Firestore,问题是参考 Firebase 实时数据库。所以这段代码在 RTDB 中不起作用。
      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2011-12-14
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多