Я новичок в функциях и базе данных firestore, поэтому я немного застрял. У меня есть этот документ:
Как видите, ответы пока в пустом массиве, но у меня будет куча строк.
Проблема в том, что облачная функция, которую я использую, не работает. это моя функция
exports.registerUserResponse = functions.https.onRequest((request, response) => {
const original = request.body;
const type_form_id = original.form_response.form_id
var userRef = admin.firestore().collection('users').doc(user_email);
var transaction = admin.firestore().runTransaction(t => {
return t.get(userRef)
.then(doc => {
console.info(doc.data());
var newAnswer = doc.data().answers.arrayUnion(type_form_id);
t.update(userRef, {answers: newAnswer});
});
}).then(result => {
//return response.status(200).send();
return response.status(200).json({result: `Message added.`}).send();
}).catch(err => {
console.info(err);
return response.status(500).json({result: `Message: ${err} error.`}).end();
});
Все значения в порядке, но я получаю эту ошибку в функции arrayUnion
TypeError: Cannot read property 'arrayUnion' of undefined
at t.get.then.doc (/user_code/index.js:27:58)
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
Итак, я не знаю, как мне использовать эту функцию. Спасибо за любые ответы!





arrayUnion не является методом, существующим для любого элемента данных, который вы можете получить из запроса Firestore. Это определенно недоступно для значения undefined, которое вы получаете doc.data().answers.
Похоже, вы не понимаете, как использовать FieldValue.arrayUnion(). Вам не нужна транзакция, чтобы использовать это. Просто выполните обновление, как описано в документация:
var washingtonRef = db.collection('cities').doc('DC');
// Atomically add a new region to the "regions" array field.
var arrUnion = washingtonRef.update({
regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
});
Ваш может выглядеть примерно так:
admin.firestore().collection('users').doc(user_email).update({
answers: admin.firestore.FieldValue.arrayUnion(type_form_id)
}).then(...);
Спасибо! Ты был прав. Это решает проблему. Я новичок в этом, так что да, я был сбит с толку, jajajaaj