我正在通过构建一个待办事项应用程序来了解 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 的项目进行查询对我有用,但我似乎找不到如何向其添加项目。
编辑:
最佳答案
使用 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/