Firebase 推送数组 - Javascript
Posted
技术标签:
【中文标题】Firebase 推送数组 - Javascript【英文标题】:Firebase pushing array - 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);
【问题讨论】:
【参考方案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 中不起作用。以上是关于Firebase 推送数组 - Javascript的主要内容,如果未能解决你的问题,请参考以下文章