为什么云功能有时会覆盖文档,但有时会合并数据?

时间:2019-06-02 20:12:18

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我在Firestore收集了文件。然后,我编写了一个云函数,将文档聚合为带有一组对象的一个​​文档。

问题在于,第一次触发该函数时,它将创建一个新文档(用于汇总数据)或重写现有文档。但是随着数据的更改,该功能仅将新数据合并到现有数据中。因此,在集合中只有两个文档在25个更改之内,聚合文档将被扩展到数组中的50个项目(而不是预期的两个)。

但是,如果我等待一段时间(10-20分钟)然后再试一次,该函数最终将重写文档。然后再次合并数据。

有人遇到这样的问题吗? 如何向Firestore说应该严格重写文档?

我尝试过update,set(data,{merge:false})方法,结果是一样的。试图先删除文档然后创建一个新文档,但是firestore的行为不充分,有时会删除,但有时会创建文档。

exports.aggregateTracks = functions.firestore
  .document('playlists/{playlistId}/tracks/{trackId}')
  .onWrite((change, context) => {
     const playlistId = context.params.playlistId;
     const trackId = context.params.trackId;

     const docRef = admin.firestore().collection('playlists').doc(playlistId);

     docRef.collection('tracks').orderBy('likes', 'desc')
    .get()
    .then(querySnapshot => {

        trackCount = querySnapshot.size;
        querySnapshot.forEach(doc => {
        tracks.push(doc.data());
        });

    resultRef = admin.firestore().collection('playlists').doc(playlistId)
        .collection('trackAggregation').doc('trackAggregation');

    var FieldValue = admin.firestore.FieldValue;
    var data = {
        count: trackCount,
        tracks: tracks,
        timestamp: FieldValue.serverTimestamp()
    };

    resultRef.set(data);

    return docRef;
    }).catch(err => console.log(err));

  return null;
});

我希望每次函数.set()数据时都会重写文档。

0 个答案:

没有答案