如何使用REST在Firestore文档中插入服务器时间戳?

时间:2018-02-04 16:57:21

标签: rest firebase google-cloud-firestore

我想使用REST调用Firestore createDocument方法插入文档。其中一个字段是应在服务器上设置的时间戳字段。使用Android SDK,就像使用Date注释@ServerTimestamp字段并将其保持为空一样简单 - 现在我该如何在REST中执行此操作?

{
  "fields": {
    "timezoneId": {
      "stringValue": "Europe\/London"
    },
    "city": {
      "stringValue": "London"
    },
    "timestamp": {
      "timestampValue": "???"
    }
  }
}

我尝试使用null0,空字符串,timestamp - 一切都失败,错误需要标准的RFC3339格式(例如2018-01-31T13:50:30.325631Z)。我可以使用任何占位符值,还是以任何方式获得该时间戳?

1 个答案:

答案 0 :(得分:0)

创建文档时,Android SDK不会执行createDocument请求。相反,它使用write请求来同时发出updatetransform请求。如果您只想使用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会生成它们)。我希望这会有所帮助。