Firestore 时间戳属性在管理 SDK 上带有下划线前缀,但在客户端 SDK 中则没有

Mik*_*ike 6 javascript firebase google-cloud-firestore

当我使用 Firestore Admin SDK 加载和字符串化用户数据时,时间戳具有以下结构:

{
  "_seconds": 1566129600,
  "_nanoseconds": 0
}
Run Code Online (Sandbox Code Playgroud)

当在客户端加载和字符串化相同的数据时,我得到以下结构:

{
  "seconds": 1566129600,
  "nanoseconds": 0
}
Run Code Online (Sandbox Code Playgroud)

这种差异有充分的理由吗?

我在前端使用 JavaScript,后端使用 Node.js。

Dou*_*son 3

您看到的是任一 SDK 中时间戳的实现细节。您实际上不应该依赖这些细节。如果要从 JSON 保存和加载 Timestamp 对象,则应使用其记录的公共访问器读取秒和纳秒的时间组件。然后,要重建时间戳,请将这些值传递到其构造函数中。

如果 Timestamp 对象具有 toJSON 函数,您可以调用该函数来将对象序列化为 JSON。但事实并非如此,而且您不能只对主对象本身进行字符串化。您可以为此提交功能请求。

  • “你真的不应该依赖这些细节。” 我真的希望我不必这样做,我真的这样做。我将集合预加载到服务器上。我根据时间戳订购集合。一切都很好。但是,如果我想基于“timestamp”属性进行分页(因为我无法在预加载时将整个“DocumentSnapshot”从服务器传递到客户端),我需要将 Timestamp 转换为对象“{秒,纳秒}” ` 预加载,然后在使用游标查询时返回。我的转换器适用于两个 SDK,因此我需要检查下划线和非下划线键(?) (3认同)