обновить childByAutoId с помощью updateChildValues - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь обновить дочерний узел в моей базе данных firebase, используя childByAutoID и updateChildAt (). Когда я выполняю код, тип обновляется, однако он находится за пределами узла, как показано ниже.

image

тип: 3 должен быть обновлен внутри узла, который говорит тип: 2

код, который я использую для выполнить это выглядит как

let DB_REF = Database.database().reference()
let WORK_PROG_REF = DB_REF.child("workInProgress")


    func completeJobProgress() {
    let workUser = self.workerUser
    let uid = Auth.auth().currentUser?.uid
    let workerId = workUser?.uid
    let address = workerUser?.address
    let createDate = Int(NSDate().timeIntervalSince1970)

    Database.database().reference().child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
        guard let dictionary = snapshot.value as? [String : Any] else { return }
        let user = User(dictionary: dictionary as [String : AnyObject])
        workUser?.uid = snapshot.key

        let docData: [String: Any] = ["workerId": uid!,
                                      "creationDate": createDate,
                                      "fromId" : workerId!,
                                      "location": address!,
                                      "type": 3,
                                      "checked": 0,]


        self.setJobToCompletedInDatabase(uid: uid!, values: docData as [String : AnyObject])
        self.postJobNotificationsIntoDatabseWithUID(uid: workerId!, values: docData as [String : AnyObject])


//how I initially got the type: 3 to save under the node was by using the line below 

WORK_PROG_REF.child(uid!).child("type").setValue(3)


        print(workerId!)

     }, withCancel: { (err) in
        print("attempting to load information")
        })

        print("Finished saving user info")
        self.dismiss(animated: true, completion: {
            print("Dismissal complete")
        })


    }

это просто устанавливает тип, который будет находиться под узлом. Я попытался использовать приведенный ниже код, но со строкой ниже я получаю сообщение об ошибке. Не удается преобразовать значение типа 'String' в ожидаемый тип аргумента '[AnyHashable: Any]'

     WORK_PROG_REF.child(uid!).updateChildValues("type").setValue(3)

Спасибо за все и вся помощь

1 Ответ

1 голос
/ 05 марта 2020

Попробуйте:

Решение с транзакцией:

WORK_PROG_REF.child(uid!).child("-M1bOYAcP_IMFbgz8siD").runTransactionBlock({ (result: MutableData) -> TransactionResult in
            if var objInfo = result.value as? [String: Any] {
                objInfo["type"] = 3

                // Set value and report transaction success
                result.value = objInfo

                return TransactionResult.success(withValue: result)
            }else{
                return TransactionResult.success(withValue: result)
            }
        }) { (error,completion,snap) in
            //Handle Error
        }

Решение без транзакции:

WORK_PROG_REF.child(uid!).child("-M1bOYAcP_IMFbgz8siD"). child("type").setValue(3)

Я надеюсь, что это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...