如何在Firebase中处理包含服务器时间戳的对象的读写?

如何在Firebase中处理包含服务器时间戳的对象的读写?,firebase,google-cloud-firestore,timestamp,google-cloud-functions,Firebase,Google Cloud Firestore,Timestamp,Google Cloud Functions,我会解释的。 我一直在琢磨如何使用FieldValue.serverTimestamp()在Firebase中处理时间戳 假设有一个名为question的对象,我希望该对象包含带有服务器戳的时间戳。类的外观(时间戳部分是唯一重要的部分): 然后我把它设置成这样 val mQuestion = Question("id", "title", "details", "author", FieldValue.serverTimestamp()) db.collection("questions").

我会解释的。 我一直在琢磨如何使用
FieldValue.serverTimestamp()
在Firebase中处理时间戳

假设有一个名为question的对象,我希望该对象包含带有服务器戳的时间戳。类的外观(时间戳部分是唯一重要的部分):

然后我把它设置成这样

val mQuestion = Question("id", "title", "details", "author", FieldValue.serverTimestamp())

db.collection("questions").document().set(mQuestion)
这是正确的方法吗

如果是,我如何处理读取?因为在读取数据时,时间戳字段现在将对应于
Date
类型,并且会导致崩溃,因为Date无法转换为FieldValue

我是否需要为每种类型的对象创建两个类?一个用于阅读,一个用于写作?感觉不对


我在想,也许我在类中有时间戳,类型是
Data
,然后我上传它为空,云函数会立即写入日期。我觉得这样做可能有效,但效率也不高。

自动序列化和反序列化(从我的角度来看)主要是为了方便普通的读写操作。我不认为它是一种适用于所有可以执行的读写操作的一刀切机制。底线:如果便利层不适合你,那就不要使用它

您试图对
FieldValue.serverTimestamp()
执行的操作似乎是不方便使用的一种外围情况,因为该值必须在服务器上而不是在客户端上确定。在实现时,客户机和服务器无法就应用于读写的特定类型达成一致。如果客户机希望服务器写入当前时间戳,它必须发送一个令牌来指示该时间戳,而不是实际键入的时间戳


您当然可以实现不同的读写类型,这没关系。或者,您可以通过传递和解析映射值来控制序列化,这可能更常见(也更有效,因为它不涉及反射)。简而言之,我认为目前的强类型系统没有一个简单的解决方法。

自动序列化和反序列化(从我的角度来看)主要是为了方便普通的读写操作。我不认为它是一种适用于所有可以执行的读写操作的一刀切机制。底线:如果便利层不适合你,那就不要使用它

您试图对
FieldValue.serverTimestamp()
执行的操作似乎是不方便使用的一种外围情况,因为该值必须在服务器上而不是在客户端上确定。在实现时,客户机和服务器无法就应用于读写的特定类型达成一致。如果客户机希望服务器写入当前时间戳,它必须发送一个令牌来指示该时间戳,而不是实际键入的时间戳

您当然可以实现不同的读写类型,这没关系。或者,您可以通过传递和解析映射值来控制序列化,这可能更常见(也更有效,因为它不涉及反射)。简言之,我认为目前的强类型系统没有简单的出路

val mQuestion = Question("id", "title", "details", "author", FieldValue.serverTimestamp())

db.collection("questions").document().set(mQuestion)