【问题标题】:Deleting an Item in Firebase在 Firebase 中删除项目
【发布时间】:2017-12-27 15:22:49
【问题描述】:

我在 Firebase 中有以下数据:

Before Deletion (Link)

在“-Kabn1954”分支中,我想删除项目“apple”。使用 Swift,我删除了特定分支中特定索引处的项目,使用以下命令:

self.ref.child("-Kabn1954").child("foods").child("1").removeValue()

但是,在我这样做之后,Firebase 数据如下所示:

After Deletion (Link)

如您所见,此分支中的数据现在直接从索引 0 转到索引 2。因此,我收到错误消息。我怎样才能使索引 1 处的项目被删除时,其余两个项目的索引为 0,后跟索引为 1?

【问题讨论】:

标签: swift firebase firebase-realtime-database


【解决方案1】:

Firebase 不会 actually store the data as an array,而是将其存储为一个由您观察到的索引键控的对象。该指南建议您应该尝试重组数据,以便不使用类似数组的行为。

如果这不可能或真的不可取,我不知道 Swift API 是如何工作的,但是在 python 和 JavaScript 库中,如果你观察父 foods 元素,你会得到一个您可以拼接和推送更新的数组对象。我猜这在 Swift 中也是如此,因为 API indicates 也可以返回 NSArray

正如博文所述,当您想要重新索引时,您需要更新整个数组,因为 Firebase 不会为您执行此操作。 setValue() accepts an NSArray 可以在 foods 引用上调用。请注意这里的竞争条件,您需要将读取和写入封装到单个事务中以避免丢失更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多