Для обновления документа я делаю следующее:
1) Я собираю первую часть данных из документа в коллекцию под названием "Loc"
2) Я использую часть данных из 1), чтобы получить документ в коллекции под названием "userInfo"
3) Я использую результаты 1) и 2) для обновления второго документа
Я использовал Транзакция , потому что мне нужны эти 3 действия для одновременного запуска в соответствии с документацией , это возможно.
return new Promise((res, rej) => {
var LocRef = db.collection("Loc").doc(newLocale);
db.runTransaction(function (transaction) {
return transaction.get(LocRef).then(function (doc) {
if (!doc.exists) {
throw "Document does not exist!";
}
var userInfoDocRef = userInfoRef.doc(user_id)
transaction.get(userInfoDocRef).then(function (userDoc) {
if (!userDoc.exists) {
throw "Document does not exist!";
}
var userInfoUpdate = {
"preferred_locale": newLocale,
"preferred_pair": userDoc.data().preferred_crypto_currency + doc.data().CurrencyCode,
"preferred_fiat_currency": doc.data().CurrencyCode
}
transaction.update(userInfoRef, userInfoUpdate);
var ans = {"success": true}
return ans
}).catch((e)=>{
console.log(e)
});
}).then(function (ans) {
res(ans)
}).catch(function (err) {
// This will be an "population is too big" error.
console.error(err);
rej(err)
});
})
})
Однако я получаю следующую ошибку:
Ошибка: аргумент «documentRef» не является допустимой DocumentReference.
Не удалось сериализовать объект типа «CollectionReference». Firestore не поддерживает объекты JavaScript с пользовательскими прототипами (т.е. объекты, созданные с помощью оператора «new»).