【问题标题】:Update value of nested array in firebase database [closed]更新firebase数据库中嵌套数组的值[关闭]
【发布时间】:2018-05-15 16:36:58
【问题描述】:

我正在使用 Firebase 身份验证和实时数据库使用 Vue.js 构建一个 Web 应用程序,这是我的新手。 在这个应用程序中,用户回答问题以获得一些分数。

我的问题是:我想更新已在数据库中存储和创建的现有数组,以便该用户的 progress/points 可以跟踪更新我的应用程序中的所有组件。

例如,假设我想增加屏幕截图中突出显示的值+1

我正在考虑类似userid.progress[6][0] += 1 之类的东西,就像在普通的 javascript 中一样,但我无法更新数据库,值仍为 0。 我读过一些关于.set().update() 的内容,但在这种情况下,我应该重写所有数组(这将是一个问题),但我可能完全错了。

PS:获取用户ID或当前用户不是问题,一切正常。 希望能找到帮助我的人,在此先感谢您!

【问题讨论】:

  • 你不能那样做。首先get()存储的值,使用.update()递增
  • 有点不清楚您要完成什么,但我在下面为一些可能的问题写了一个答案。下次请包括minimum code that reproduces where you are stuck,它可以消除大部分的猜测工作,并大大提高您快速获得良好帮助的机会。
  • 我会选择@FrankvanPuffelen 回答这个问题。但总的来说Arrays Are Evil。它们很难使用,因为添加或删除元素需要读取和重写数组。此外,它们不能直接查询。它们确实没有集成到 JSON 结构中,并且通常有更好的选择。如果您可以使用特定用例(例如 0、1、2、3 代表什么)以及一些代码来更新您的问题,我们或许可以提供更完整的答案。

标签: javascript arrays firebase firebase-realtime-database vue.js


【解决方案1】:

如果您尝试更新现有分数,您可以在最细粒度的级别上进行编写。所以:

ref.child("pjoCy...0tl3/progress/0/6/0").set(1)

如果您想将新分数推送到数组的末尾,您确实需要读取整个分数数组以在末尾添加一个新值。这是 Firebase 建议不要像您一样使用数组索引的众多原因之一。如果您改为使用所谓的 push-ID,则添加新值变得如此简单:

ref.child("pjoCy...0tl3/progress/0/6").push(1)

我建议阅读更多关于structuring lists in the Firebase documentationhandling arrays in Firebase 上的经典博客文章。

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2019-07-03
    • 2017-02-12
    • 2020-07-08
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多