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 数据库创建覆盖多个节点的原子事务?