【发布时间】:2020-01-03 03:09:37
【问题描述】:
Firebase 提供以下两种我知道的方法,用于在将文档写入 Firestore 集合时处理日期:
以下将生成一个当前时间戳,我假设它代表所有地区的一致日期,格式在其documentation 中注明,并且是在文档写入时获取当前日期的推荐方法收藏:
admin.firestore.FieldValue.serverTimestamp()
还有以下方法可以接受日期作为参数。这将生成与相同 Firestore 时间戳格式匹配的结果:
admin.firestore.Timestamp.fromDate(new Date())
我一直在考虑在我的特定情况下使用后者作为生成日期的方法,我可以使用该日期将匹配日期写入 Firestore 集合中的文档以及额外单独插入到我的实时数据库中.我需要保证将完全相同的日期写入两个地方。
我在云功能中正在做什么:
const datePosted = new Date();
// then when setting the data in Firestore i do the following to convert it
admin.firestore().collection(`/posts`).doc().set({
foo: 'bar',
datePosted: admin.firestore.Timestamp.fromDate(datePosted)
})
// followed by a subsequent write to my Realtime database using the same date
admin.database().ref(`posts`).set({
foo: 'bar',
datePosted: Date.parse(datePosted)
})
谁能提供任何关于这种方法是否是一个坏主意的见解?我需要确定以我描述的方式生成日期是否是一种有效的方法,或者它是否不可靠,因为我的文档中生成的日期可能会因我的云实例何时和/或哪个区域而异函数被实例化。 我正在回避云函数在不同区域或出于任何其他原因进行实例化所需的不同时间。
【问题讨论】:
-
如果你真的想拥有完全相同的时间戳值(“我需要保证将完全相同的日期写入两个地方”),你可以先写入 Firestore(使用 serverTimestamp),阅读文档获取值并使用该值写入 RTDB。当然,这意味着额外的阅读......
-
是的,感谢您抽出宝贵时间回复。我希望避免这种情况,更不用说所涉及的延迟......但我暂时通过 onCreate 侦听器方法访问日期,并希望一起重构以避免在两个地方需要日期。
标签: javascript firebase google-cloud-firestore