Как создать статистическую функцию Cloud Firestore для «лайков»? - PullRequest
0 голосов
/ 21 января 2020

Я новичок в firebase, хочу создать статистическую функцию для количества лайков.

У меня есть три root коллекции: фиды, лайки и пользователи.

каналы имеют следующие поля:

enter image description here

description: <description of feed>

likeCount:<Total count of like>

title: <feed title>

userId: <userId of feed>


лайки имеют следующие поля:

enter image description here

feedId: <id of the feed where a user gives like>

likeBy: <id of the user who likes the feed>

likeTo: <id of the user how created a feed>


у пользователей есть следующие поля:

username: <User name>

email: <User email>

Когда пользователю нравится фид, в коллекцию лайков добавляется новая запись.

Я пытаюсь создать статистическую функцию для increase likeCount in feed collection когда пользователь дает лайк в ленте.


Я проверяю решение. Я нашел решение для вложенной структуры, например:

enter image description here


Итак, мой вопрос заключается в том, можно ли создать агрегатную функцию для количество лайков в моей структуре данных ( три root коллекция: фиды, лайки и пользователи. )? Если да, то как мне этого добиться?

или мне нужно изменить структуру данных?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Я реализовал аналогичную функцию в своей, я использовал Облачные функции Firebase

Так что вы можете сделать что-то вроде этого:

Всякий раз, когда что-то добавляется в базу данных в определенном месте увеличьте значение «likesCounter» на единицу:

exports.countLikes = functions.firestore
.document('likes').onWrite((change, context) => {
 const data = change.after.val();
 const count = Object.keys(data).length;
 return change.after.document.collection('likesCount').set(count - 1);
});

^^ Вы поместите этот код в индексный файл. js вашей папки проекта функций firebase.

Вам нужно будет изменить приведенный выше код, чтобы он соответствовал структуре данных вашей базы данных. Следуйте тезисам шаги , чтобы начать работу с облачными функциями в вашем проекте Firebase, если вы не знакомы.

0 голосов
/ 23 января 2020

Я выполнил свое требование методом onCreate()

следующий код:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();
const db = admin.firestore();

exports.getLikeCount = functions.firestore
    .document('likes/{likeId}')
    .onCreate((snap, context) => {
        // Get an object representing the document (get created like data)
        const likeData = snap.data();

        // Get feed_id from created like data
        const feedId = likeData['feed_id'];

        // Create feed ref from feed_id which get from created like data
        const feedRef = db.collection('feeds').doc(feedId);

        return feedRef
            .get()
            .then(doc => {
                // Get current likesCount for feed
                const likesCount = doc.data().likesCount;

                // Increase likesCount with +1 for get feed
                return feedRef.update({likesCount: likesCount + 1});
            })

    });

...