我在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()数据时都会重写文档。