【问题标题】:How do I set a firestore Timestamp from a custom Object?如何从自定义对象设置 Firestore 时间戳?
【发布时间】:2020-10-30 11:56:09
【问题描述】:

我有一个名为myData 的自定义对象,在该对象中我有一个时间戳。考虑到 Firebase 的 Node 驱动程序不支持自定义对象,我使用以下行快速将数据转换为纯 JSON:

const dataAsJson = JSON.parse(JSON.stringify(myData));

但是,当它执行此操作时,它会从对象中删除 Date 并将其转换为字符串(如果它最初是 Date 类型),或者如果它是 FirebaseFirestore.Timestamp 类型的映射。

如果data = {dateExample: admin.firestore.Timestamp.fromDate(new Date('December 10, 1815'))},我想我可以在使用const res = await docRef.set(data, {merge: true}); 之后立即在同一个对象上拍摄另一个直接设置,但我宁愿一次性完成。

以前有人解决过这个问题吗?我担心如果我搞砸了批量提交,我可能无法选择先设置哪个。

【问题讨论】:

  • “Firebase 的 Node 驱动程序不支持自定义对象” - 您是如何得出这个结论的?您可以明确地将纯 JavaScript/TypeScript 对象传递给 Firestore。它将根据对象中的属性在文档中创建字段和值。
  • @DougStevenson 我猜是指具有自定义原型的对象。我回来的错误是Value for argument data is not a valid Firestore document. Couldn't serialize object of type... Firestore doesn't support objects with custom prototypes。也许有一种简单的方法可以将我的自定义原型转换为 Firestore 接受的格式。现在正在调查。

标签: node.js typescript firebase google-cloud-firestore


【解决方案1】:

字符串化然后解析您的数据显然会破坏对象中的日期和时间戳类型。这些需要保持完整才能被 Firestore 识别。

您必须提供要存储的对象的纯 JavaScript 对象表示。这可以像将属性复制到基于原始对象的新对象一样简单。您需要提供 JavaScript Date 或 Firestore Timestamp 对象才能在文档中获得正确的时间戳类型。引用类型也一样。

由于我们看不到您尝试序列化的对象,因此我无法给出具体建议,但现在应该清楚您需要做什么了。

【讨论】:

  • 完美,这正是我所做的。这是目前有效的最终代码:const myCustomObj = new Object({hello: 1, date: Timestamp}) const dataAsJson = JSON.parse(JSON.stringify(myCustomObj)); dataAsJson.date = myCustomObj.date;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多