在Read上更新FireStore文档

时间:2018-02-09 18:25:33

标签: reactjs firebase google-cloud-firestore

我正在使用React和Firestore创建类似于网站的博客。每个帖子都作为Post集合中的单独文档存储。

文档结构如下:

--Posts
     --Post1
           --title
           --body
           --views
           --likes
     --Post2
           --title
           --body
           --views
           --likes

我想在有人查看帖子时更新视图。在Firestore中实现这一目标的最佳方法是什么。

1 个答案:

答案 0 :(得分:3)

在许多情况下,您可以直接使用update。但是,由于您正在递增计数器,因此当多个用户尝试在同一时间递增计数器时,您还应使用transaction来防止竞争条件:

// Create a reference to the post.
const postRef = db.collection('Posts').doc('<postId>');

return db.runTransaction(function(transaction) {
    // This code may get re-run multiple times if there are conflicts.
    return transaction.get(postRef).then(function(post) {
      if (!post.exists) {
        throw new Error('Post does not exist!');
      }

      const newViews = post.data().views + 1;
      transaction.update(postRef, { views: newViews });
    });
}).then(function() {
    console.log('Transaction successfully committed!');
}).catch(function(error) {
    console.log('Transaction failed: ', error);
});