我想使用REST调用Firestore createDocument方法插入文档。其中一个字段是应在服务器上设置的时间戳字段。使用Android SDK,就像使用Date
注释@ServerTimestamp
字段并将其保持为空一样简单 - 现在我该如何在REST中执行此操作?
{
"fields": {
"timezoneId": {
"stringValue": "Europe\/London"
},
"city": {
"stringValue": "London"
},
"timestamp": {
"timestampValue": "???"
}
}
}
我尝试使用null
,0
,空字符串,timestamp
- 一切都失败,错误需要标准的RFC3339格式(例如2018-01-31T13:50:30.325631Z
)。我可以使用任何占位符值,还是以任何方式获得该时间戳?
答案 0 :(得分:0)
创建文档时,Android SDK不会执行createDocument
请求。相反,它使用write
请求来同时发出update
和transform
请求。如果您只想使用createDocument
,那么答案是否定的。
您的有效载荷看起来像这样:
{
"writes": [
{
"update": {
"name": "projects/{projectId}/databases/{databaseId}/documents/{document_path}",
"fields": {
"timezoneId": {
"stringValue": "Europe\/London"
},
"city": {
"stringValue": "London"
}
}
},
// ensure the document doesn't exist
"currentDocument": {
"exists": false
}
},
{
"transform": {
"document": "projects/{projectId}/databases/{databaseId}/documents/{document_path}",
"fieldTransforms": [
{
"fieldPath": "timestamp",
"setToServerValue": "REQUEST_TIME"
}
]
}
}
]
}
以这种方式添加文档的唯一缺点是,您需要自己生成Document
ID(SDK会生成它们)。我希望这会有所帮助。