firebase - 在多个位置进行原子删除

Posted

技术标签:

【中文标题】firebase - 在多个位置进行原子删除【英文标题】:firebase - atomic delete at multiple locations 【发布时间】:2016-10-19 12:54:52 【问题描述】:

有没有办法在 Firebase 中执行原子删除?

docs说

您还可以通过将 nil 指定为另一个写入操作(例如 setValue 或 updateChildValues)的值来删除...以这种方式进行的同时更新是原子的:要么所有更新成功,要么所有更新失败。

但我无法让它工作。我下面的代码返回错误

无法将 _SwiftValue 类型的对象存储在 .只能存储对象 输入 NSNumber、NSString、NSDictionary 和 NSArray

我在这里遗漏了什么还是文档有误?

var topNodeRef = FIRDatabase.database().reference()
var childUpdates: [String:Any?] = [:]

childUpdates.updateValue(nil, forKey: "/owner")
childUpdates.updateValue(nil, forKey: "/pet")

topNodeRef.updateChildValues(childUpdates)

【问题讨论】:

【参考方案1】:

如果其他人遇到同样的问题,我设法通过使用NSNull() 而不是nil 来解决它

var topNodeRef = FIRDatabase.database().reference()
var childUpdates: [String:Any] = [:]

childUpdates["/owner"] = NSNull()
childUpdates["/pet"] = NSNull()

topNodeRef.updateChildValues(childUpdates)

【讨论】:

这仍然对您有用吗?我现在收到此错误 - 'InvalidFirebaseData', reason: '(updateChildValues:) Non-string keys are not allowed in object at path:【参考方案2】:

语法似乎与我在这个工作 sn-p 中使用的略有不同:

var childUpdates: [String:Any?] = [:]

childUpdates["-K9i1z2KPLzh9_OrAaQU"] = nil
childUpdates["-K9i2kfteaS7tap93Gf6"] = nil

ref?.updateChildValues(childUpdates)

【讨论】:

您使用的是 Firebase pod 吗?如果是,我可以知道版本吗?我正在运行的代码在逻辑上与您的代码相同,但我的最终出现错误 我没有指定任何版本。但我怀疑这个版本与它有什么关系。它似乎与填充字典的 Swift 语法更相关。当我使用你的方法来填充字典时,我得到了和你一样的错误。当我把它改成我共享的sn -p时,错误消失了,孩子们被删除了。你试过我的方法吗?您是否仍然在同一行上遇到相同的错误? 真的很奇怪,我无法使用您的方法将值添加到字典中。出于某种原因,这些值没有插入到我的字典中。尝试在操场上运行它 -> var dictio: [String:Any?] = [:] dictio.updateValue(nil, forKey: "test") dictio["secondTest"] = nil 我认为这段代码不适用于可选类型。 updateChildValues() 函数采用 [AnyHashable : Any] 满足 [String:Any] 但不满足 [String:Any?]

以上是关于firebase - 在多个位置进行原子删除的主要内容,如果未能解决你的问题,请参考以下文章

如何分别从 Firebase Auth 和实时数据库中原子地删除用户和用户的数据?

是否可以使用 Firebase Cloud Functions on Realtime 数据库创建覆盖多个节点的原子事务?

将多个图像存储到 Firebase 并获取 url

Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'

如何让 Firebase 自动删除超过 30 分钟的值

如何根据位置从“回收”视图中删除Firebase数据库密钥