我在 Firebase 中有以下数据:
在“-Kabn1954”分支中,我想删除项目“apple”。使用 Swift,我在特定分支中的特定索引处删除了一个项目,使用这个:
self.ref.child("-Kabn1954").child("foods").child("1").removeValue()
但是,在我这样做之后,Firebase 数据看起来像这样:
如您所见,此分支中的数据现在直接从索引 0 转到索引 2。因此,我得到一个错误。我怎样才能使索引为 1 的项目被删除时,剩下的两个项目的索引为 0,后跟索引为 1?
最佳答案
Firebase 不会 actually store the data as an array ,而是在您观察时将其存储为由索引键控的对象。该指南建议您应该尝试重构数据,以便不使用类似数组的行为。
如果那不可能或真的不可取,我不知道 Swift API 是如何工作的,但是在 python 和 JavaScript 库中,如果您观察父 foods
元素,你会得到一个数组对象,你可以拼接它并推送更新。我猜这在 Swift 中也是如此,因为 API indicates NSArray
也可以返回。
正如博文中提到的,当您想要重新编制索引时,您需要更新整个数组,因为 Firebase 不会为您做这件事。 setValue()
accepts an NSArray
可以在 foods
引用上调用。请注意此处的竞争条件,您需要将读取和写入封装到单个事务中以避免丢失更新。
关于swift - 在 Firebase 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987423/