Как добавить элемент в массив внутри документа пожарного депо? - PullRequest
0 голосов
/ 20 апреля 2019

Я новичок в функциях пожарной части и в базе данных, так что я немного застрял. У меня есть этот документ:

Database Document

Как видите, ответы в пустом массиве пока нет, но у меня будет куча строк.

Проблема в том, что используемая облачная функция не работает. это моя функция

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.log(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.log(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)

Итак, я не знаю, как мне использовать эту функцию. Спасибо за любые ответы!

1 Ответ

1 голос
/ 21 апреля 2019

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(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...