Firestore 将具有服务器时间戳的对象附加到数组(字段类型)
Posted
技术标签:
【中文标题】Firestore 将具有服务器时间戳的对象附加到数组(字段类型)【英文标题】:Firestore append to array (field type) an object with server timestamp 【发布时间】:2021-05-26 14:22:43 【问题描述】:我想按照下面提到的代码向 Firestore 文档插入一个对象。但它抛出了错误
.update(
"comments": firebase.fieldValue.arrayUnion(
userId,
comment: data.comment,
createdAt: firebase.fieldValue.serverTimestamp(),
)
错误:
FirebaseError:使用无效数据调用函数 FieldValue.arrayUnion()。 FieldValue.serverTimestamp() 只能与 update() 和 set() 一起使用(在文档中找到...)
如何向推送的数组对象添加时间戳,或者有没有其他方法可以实现类似的结果?我从上面的错误中得到什么是我不能使用arrayUnion
中的时间戳
【问题讨论】:
【参考方案1】:您不能将FieldValue.serverTimestamp()
用作arrayUnion 的值,因为该函数不返回timestamp
,而是在set()
或update()
中使用的标记。为此,您需要获取实际的timestamp
class 值。获取此值的方式因本地 SDK 和管理 SDK 不同,因此根据您使用的内容,您可以执行以下操作:
对于 Admin SDK:
import admin = require('firebase-admin');
const created_at = admin.firestore.Timestamp.now()
对于本地 SDK:
import Timestamp from '@google-cloud/firestore';
const created_at = Timestamp.now()
然后您可以通过以下方式更新您的文档:
.update(
"comments": firebase.fieldValue.arrayUnion(
userId,
comment: data.comment,
createdAt: created_at,
)
【讨论】:
它不起作用,我认为这个 serverTimestamp 只能从 set 或 update 方法内部调用 是的,我正在更新答案,请稍等。 已编辑,试一试。 :)以上是关于Firestore 将具有服务器时间戳的对象附加到数组(字段类型)的主要内容,如果未能解决你的问题,请参考以下文章
swift语言中云Firestore服务器时间戳的等效数据类型是啥?
Swift & Firestore - 使用 .arrayUnion() 将字典附加到嵌套数组