Cloud Firestore - Облачные функции: TypeError: collectionRef.child не является функцией - PullRequest
0 голосов
/ 14 мая 2018

Cloud Firestore - Облачные функции: TypeError: collectionRef.child не является функцией

Я использую Cloud Functions для обновления номера комментариев в родительской коллекции Cloud Firestore, поэтому при добавлении комментария Cloud Functions может автоматически обновлять номер комментария.

Cloud Firestore - Облачные функции: TypeError: collectionRef.child is не функция at exports.updateCommentNumbers1.functions.firestore.document.onCreate (/User_code/index.js:23:33) на объекте. (/User_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27) на следующем (родном) в /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 в __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) в cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36) по адресу /var/tmp/worker/worker.js:716:24 at process._tickDomainCallback (internal / process / next_tick.js: 135: 7)

код:

exports.updateCommentNumbers1 = functions.firestore
.document('postlist/{postlistId}/comments/{commentsID}')
.onCreate((change, context) => 
{
    const collectionRef = change.ref.parent;
    const countRef = collectionRef.child('comment_number');

    let increment;
    if (change.after.exists() )
    {
        increment = 1;
    }
     else 
    {
        return null;
    }

    return countRef.transaction((current) => 
    {
        return (current || 0) + increment;
    }).then(() => 
    {
        return console.log('Comments numbers updated.');
    });
});

Вопрос

  1. Как я могу отослать родительскую коллекцию через ее подколлекцию?

  2. Как получить значение поля родительской коллекции и обновить его?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Наконец, мне потребовалось больше двух дней, чтобы понять это:

Ответ на первый вопрос: change.after.ref.parent;

Пример облачных функций для Cloud Firestore очень маленький.

Все примеры - база данных реального времени firebase.

exports.updateCommentNum = functions.firestore
.document('post/{postId}/comments/{commentsID}')
.onWrite((change, context) => 
{

    const db = admin.firestore();
    const collectionRef = change.after.ref.parent;//'post/{postId}/comments/'
    const countRef = collectionRef.parent;//'post/{postId}/'

    return db.runTransaction(t => 
    {
        return t.get(countRef).then(restDoc => 
        {
            var newNumber;
            newNumber = restDoc.data().comment_number + 1;
            newNumber = newNumber || 1;//filter any "falsey" value to 1.
            //The "falsey" values are:false/null/undefined/0/"" ( empty string )/NaN ( Not a Number )

            return t.set(countRef, {comment_number: newNumber}, {merge: true});
        });
    });


});
0 голосов
/ 14 мая 2018

collectionRef в вашем коде - это объект типа CollectionReference . Как видно из документации по API, для этого объекта нет метода child (). На самом деле коллекции не имеют назначаемых свойств вообще. Вы можете хранить информацию только в документах, и документы должны существовать в некоторой коллекции.

Итак, вам нужно выяснить, в каком документе (в какой коллекции) вы хотите сохранить это значение счетчика, и вместо этого изменить какое-то поле в этом документе.

Кроме того, первый аргумент, передаваемый анонимной функции, передаваемой в onCreate, не является объектом «изменения». Это DocumentSnapshot. OnUpdate и onWrite получают объекты «change», что является разным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...