Swift:删除文档字段Firestore(云数据库)内部字典中的元素

时间:2019-09-17 05:35:14

标签: arrays swift xcode firebase dictionary

当前有一个UITableView,其中有一个编辑和删除按钮。现在,我试图弄清楚如何从数据库中删除地图/字典中的元素。例如,我要删除:

dailyIntake {。

1568695516 {

金额:12。

时间戳:1568695516.837234

}

这是我的数据库的图像: Firestore Image   

这是我在Swift中的代码:{

    @objc func handleDeleteTap() {
    print("Delete Button Tapped!")

    let deleteOption = UIAlertAction(title: "Delete", style: .destructive) { (action) in
        do {
            // handle delete logic in the backend and update tableview
            collectionReference(to: .intake).document(userUID).updateData([
                "dailyIntake" : FieldValue.arrayRemove()
                ])

        } catch let err {
            print("Failed to Sign Out with Error:", err)
            CustomAlert.showAlert(on: self, style: .alert, title: "Deletion Error", message: err.localizedDescription)
        }
    }

    let cancelOption = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
    CustomAlert.showAlert(on: self, style: .alert, title: "Delete current log?", message: nil, actions: [deleteOption, cancelOption], completion: nil)
}

感谢您的宝贵时间!请帮忙!哈哈

3 个答案:

答案 0 :(得分:0)

尝试通过交易更新字段

首先阅读字典字段,删除字典中的元素,然后更新该字段。

这里的文档应该会有所帮助:https://firebase.google.com/docs/firestore/manage-data/transactions

答案 1 :(得分:0)

您可以通过将元素传递给arrayRemove()来做到这一点

FieldValue.arrayRemove(element)

答案 2 :(得分:0)

所以我想出了如何删除Firestore(Cloud-DataBase)中的dailyIntake映射内的某个值。

 @objc func handleDeleteTap() {
print("Delete Button Tapped!")

let deleteOption = UIAlertAction(title: "Delete", style: .destructive) { (action) in
    do {
        // handle delete logic in the backend and update tableview
        collectionReference(to: .intake).document(userUID).updateData([
            "dailyIntake.1568695516" : FieldValue.arrayRemove()
            ])

    } catch let err {
        print("Failed to Sign Out with Error:", err)
        CustomAlert.showAlert(on: self, style: .alert, title: "Deletion Error", message: err.localizedDescription)
    }
}

let cancelOption = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
CustomAlert.showAlert(on: self, style: .alert, title: "Delete current log?", message: nil, actions: [deleteOption, cancelOption], completion: nil)

}

带有“。”键旁边的符号,它实际上会删除地图中的某个值。