Чтобы найти решение, давайте сначала определим проблему.
Вот ваша структура
Weighttracker
user_uid_0
child_by_auto_id_0
date: "19.05.2019"
weight: "236"
, если вы хотите обновить вес для этой даты, вот ваш код обновления
self.ref.child("WeightTracker").child(userid).updateChildValues(dict)
Помните, что при использовании updateChildValues, если они не существуют, они будут добавлены.Вот путь, которым вы код, обновляя эти дочерние значения в
WeightTracker/uid/values being updated here
, когда вы хотите
WeighTtracker/uid/childByAutoId/values being updated here
^^^^^^^^^^^^^
Проблема в том, что вы не знаете, что такое childByAutoId, поэтому вы не можетеобновите эти данные напрямую.
Существует несколько решений;одним из них является использование даты в качестве ключа к узлу, что означает, что ваша структура должна быть изменена
WeightTracker
user_uid_0
20190519
weight: "236"
Тогда обновление станет простым
let userid = Auth.auth().currentUser.uid
let pathRef = self.ref.child(WeightTracker).child(userid).child(date)
pathRef.child("weight").setValue(weight)
Другой вариант, использующий вашуСуществующая структура состоит в том, чтобы запрашивать узел, в котором дата равна требуемой дате, затем получить ключ к этому узлу, а затем выполнить обновление для дочернего узла веса
func updateViaQuery() {
let uid = //users uid
let uidRef = self.ref.child("WeightTracker").child(uid)
let query = uidRef.queryOrdered(byChild: "date").queryEqual(toValue: "19.05.2019")
query.observeSingleEvent(of: .value, with: { snapshot in
let key = snapshot.key
let refToUpdate = uidRef.child(key).child("weight")
refToUpdate.setValue(weight)
})
}
Единственная проблема со вторым методом состоит в том, чточто запрос не даст результатов, если дата не существует, поэтому вы должны убедиться, что она существует до обновления.