Вы должны использовать update для «обновления определенных дочерних узлов без перезаписи других дочерних узлов», см .:
https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
Ваш первый фрагмент кода должен работать с обновлением, если вы немного измените свою структуру, как следует с автоматически сгенерированными идентификаторами для кавычек
База данных
author
- nassim
- quoteID1: "...." <- ID auto generated
- quoteID2: "...." <- ID auto generated
- quoteID3: "...." <- ID auto generated
Облачная функция
Замените в первой версии кода эти строки
admin.database().ref('authors/' + author).child('quotes').set(newValue.quotes);
console.log('Updated author quotes');
return message;
этими
const quotesObject = newValue.quotes;
var updates = {};
Object.keys(quotesObject).forEach(function (key) {
let quote = quotesObject[key];
const newQuoteKey = firebase.database().ref('authors/' + author).child('quotes').push().key;
updates[newQuoteKey] = quote ;
});
return admin.database().ref('authors/' + author).child('quotes').update(updates);
Другим важным моментом является то, что вы не возвращаете обещание в своих облачных функциях. Вы должны вернуть обещание из обновления (или установить), а не сообщение. См https://www.youtube.com/watch?v=652XeeKNHSk&t=26s
В случае, если вам действительно нужно сохранить идентификатор кавычек, сгенерированный вами (т.е. 0, 1, 2 и т. Д.) В последовательности, вам придется манипулировать массивами, получая предыдущий массив значений, добавляя новую кавычку и перезаписывая существующий набор цитат с новым массивом .. много усилий! тем более, что с автоматически генерируемыми идентификаторами вы не потеряете порядок цитат: они все равно будут сохранены в том порядке, в котором они были написаны.