如何将子项添加到Firebase“数组”?

时间:2017-10-27 15:38:18

标签: 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

1 个答案:

答案 0 :(得分:2)

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

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

为了将数据推送到数据库,您需要先了解数据库中数组节点的确切位置,然后使用Reference为其创建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作为密钥)从结果中获取Reference,从而无需查询在推动之前再次获得该位置。