我通过构建待办事项应用程序来了解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的项目查询在检索列表时对我有用,但我似乎无法找到如何向其中添加项目。
编辑:
答案 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
,从而无需查询在推动之前再次获得该位置。