Вы можете найти успех и прецеденты за этой поддерживая канал пользователя, а затем только вызов, что во время выполнения.Я использую этот метод и обнаружил, что мне предоставлена большая свобода, а облачные функции позволяют мне определять, какие типы сообщений показывать и под какими изменениями добавляются новые сообщения в фид пользователя.
Способ, которым я это делаюя ищу новые сообщения с помощью облачной функции onCreate, а затем ищу, кто должен видеть это сообщение и т. д., и добавляю его в каждый из своих каналов.
В вашем случае я вижу, что он используется, ищановые лайки на пост.В новых лайках он может удалять сообщения из ленты пользователя.
Пример функции (отредактированной для краткости), которую я использую для добавления сообщений в ленты подписчиков пользователя.Захватив с помощью запроса collectionGroup, я могу запросить список всех пользователей, которые следуют за автором сообщения.
Схема выглядит следующим образом:
Users (collection)
--- User1 (document)
------- Following (collection of people User1 is following)
----------- FollowingUser1 (document, contains a uid of "followed" user)
----------- FollowingUser2
и Облачная функция:
exports.newReview = functions.firestore
.document('reviews/{reviewId}')
.onCreate((snap, context) => {
var reviewId = context.params.reviewId
var reviewData = snap.data()
var userFollowers = db.collectionGroup('following').where('uid', '==', userId)
var followingTransaction = db.runTransaction(transaction => {
return transaction.get(userFollowers).then(restDocs => {
reviewData['added_via'] = 'following'
restDocs.forEach(doc => {
var followerId = doc.ref.parent.parent.id
var followerRef = db.collection(`feeds/${followerId}/posts`).doc(reviewId)
transaction.set(followerRef, reviewData);
})
return true
});
});
return followingTransaction.then(values => {
console.log(reviewData)
var shouldPostToTwitter = reviewData.postToTwitter
return Promise.resolve()
}) .catch(error => {
console.log(error)
return Promise.reject(new Error("Error deleting"));
});
});
1014 * DB выглядеть выглядеть следующим образом: 1016 *