javascript - 如何将子项目添加到 Firebase "array"?

标签 javascript firebase firebase-realtime-database

我正在通过构建一个待办事项应用程序来了解 Firebase,为了将项目添加到某个列表,我想通过其 slug 查找该列表,并向其中添加由用户提供的项目。目前,我有以下查询:

database.ref('lists').orderByChild('slug').equalTo(listSlug).child('items').push({
    title: values.itemTitle
})

这会产生以下错误:

TypeError: __WEBPACK_IMPORTED_MODULE_1__utils_firebase__.a.ref(...).equalTo(...).child is not a function

参数是正确的,listSlug 是它应该的样子,values 也是应该的样子。在检索列表时,通过查找具有给定 slug 的项目进行查询对我有用,但我似乎找不到如何向其添加项目。

编辑:

根据要求,这里是数据库和我想要添加的未保存的示例: saving the world, one item at a time

最佳答案

使用 push()set()update() 将数据保存到数据库是 Reference 的方法接口(interface),它还提供了从数据库检索数据的更多方法。

现在,当在 Reference 上调用 orderByChild()equalTo() 方法时,会出现 Query而是返回。与Reference不同,Query只能用于从数据库检索数据。

为了将数据推送到数据库,您需要首先知道数据库中数组节点的确切位置,并使用 database.ref( ...).child(...).

例如,如果数组位于 /lists/listId1/items,您需要使用:

database.ref('lists').child('listId1').child('items').push({
    title: values.itemTitle
})

或者简单地说:

database.ref('lists/listId1/items').push({
    title: values.itemTitle
})

如果您不知道节点的位置,则需要先查询数据库才能找到它。或者,如果您之前使用查询加载过数据,则可以使用 DataSnapshot#ref 从结果中获取引用。 (或者只是 DataSnapshot#key 作为 key ),从而无需在推送之前再次查询位置。

关于javascript - 如何将子项目添加到 Firebase "array"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978766/

相关文章:

android - Firebase 崩溃报告 : FirebaseApp with name [DEFAULT] doesn't exist

javascript - 我有一个 this.state ,我需要用 setState 传入我的 componentDidMount ,如何在 setState 中使用 bind(this) ?

java - Android Firebase java.lang.StackOverflowError : stack size 8MB error when user is uploading an image

javascript - 使用 orderByChild Firebase 获取最新帖子

javascript - 关闭 fancybox 时将变量从 fancybox 传递到父页面

javascript - 重构用于遍历 DOM 的工作递归代码 (hasFiveDIV)

javascript - Ace Editor 添加 Marker 抛出错误

javascript - 使用 Javascript 进行 ASP.NET 复选框列表验证

android - FirebaseInstanceId : Token retrieval failed: SERVICE_NOT_AVAILABLE

firebase - 在 firebase 控制台中按日期过滤 firestore 查询