【问题标题】:FireStore: How to merge timestamp data to existing document?FireStore:如何将时间戳数据合并到现有文档?
【发布时间】:2020-08-06 12:15:57
【问题描述】:

我是 FireStore 的新手,我正在构建一个应用程序,用户可以在其中为照片文档添加书签并将其显示在他们的个人供稿中。这工作正常。现在,我希望能够在用户查看他们的个人提要时按书签日期对书签进行排序(orderBy 方法)。因此,为了实现这一点,我想在用户为文档添加书签时添加一个时间戳值。

这是我的尝试。 我想向社区验证这是否是一种好方法。我担心冗余和额外的写入。

async addDocToFeed({state}, doc) {
 try {
          const feedRef = this.$fireStore
            .collection(`users/${state.userProfile.uid}/feed`)
            .doc(doc.id) 

          await feedRef.set(doc) < --- copy record to user's feed collection (see json sample below)
          const bookmark = this.$fireStore
            .collection(`users/${state.userProfile.uid}/feed`)
            .doc(doc.id)
          bookmark.update({
            bookmarked: this.$fireStoreObj.FieldValue.serverTimestamp()
          })
          // })
          console.log('doc bookmarked')
        } catch (error) {
          console.error('error updating doc', error)
        }
}

添加时间戳之前doc 的 JSON 示例:

{"id":"1KecNCqYlcVRjq4BLCbZ","comments":"__vue_devtool_nan__","url":"https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2F0.jpg?alt=media&token=ee23b95b-b5d8-4abe-b1b9-e335d591b413","tags":["router","Texas"],"filename":"0.jpg","description":"test with new router setup","createdAt":{"seconds":1596020630,"nanoseconds":473000000},"title":"test with new router setup","status":"Unsolved","userId":"SvuTxDtHXJdBHImNQWByqnO3F2U2","displayName":"MrRouter"}

我尝试过:

await feedRef.set({doc, bookmarked: this.$fireStoreObj.FieldValue.serverTimestamp()}, {merge: true})

但这会删除所有数据,只添加书签时间戳。

感谢任何建议或保证我在正确的轨道上(或不是)

【问题讨论】:

    标签: google-cloud-firestore vuejs2


    【解决方案1】:
      this    
          .$fireStore
          .collection(users/${state.userProfile.uid}/feed)
          .doc(doc.id);
          .set({
              bookmarked: Date.now()
          }, {merge: true})
          .then(() => {
              resolve(true);
          }).catch((error) => {
              reject(error)
          })
    

    这应该可行。

    【讨论】:

    • 我收到一个错误resolve is not defined。以前从未见过 resolve() 。谢谢。
    • @redshift 抱歉,我没有将代码包装在承诺中。添加return new Promise(function (resolve, reject) { this .$fireStore .collection(users/${state.userProfile.uid}/feed) .doc(doc.id); .set({ bookmarked: Date.now() }, {merge: true}) .then(() =&gt; { resolve(true); }).catch((error) =&gt; { reject(error) })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2022-01-09
    • 1970-01-01
    • 2018-11-06
    • 2021-06-05
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多