10

トランザクションを使用してリアルタイムデータベーストリガでカウンタをインクリメントすることは可能ですか?Firebaseのクラウド機能:インクリメントカウンタ

exports.incPostCount = functions.database.ref('/threadsMeta/{threadId}/posts') 
.onWrite(event => { 
    admin.database().ref('/analytics/postCount') 
    .transaction(count => { 
     if (count === null) { 
      return count = 1 
     } else { 
      return count + 1 
     } 
    }) 
}); 

答えて

23

間違いなく!実際には、それはそれはいくつかの小さな違いがあるが、in this code sampleを行うの正確方法は次のとおりです。

特に
exports.countlikechange = functions.database.ref("/posts/{postid}/likes/{likeid}").onWrite((event) => { 
    var collectionRef = event.data.ref.parent; 
    var countRef = collectionRef.parent.child('likes_count'); 

    return countRef.transaction(function(current) { 
    if (event.data.exists() && !event.data.previous.exists()) { 
     return (current || 0) + 1; 
    } 
    else if (!event.data.exists() && event.data.previous.exists()) { 
     return (current || 0) - 1; 
    } 
    }); 
}); 

、このサンプルでは、​​子ノードが作成または削除されているかどうかに応じて、インクリメントとデクリメントのケースの両方を処理します。

+1

優れています。ありがとうございました。 –

関連する問題